0

我将一堆 CSV 文件加载到 R 中。我对如何从加载的数据中提取第二列并创建一个新变量有疑问。我想我想知道 R 中是否有任何函数可以将提取行“追加”到这个新变量中。我当前的代码只保留最后一个变量的第二列。很抱歉询问这样的基本操作。

下面是我的 R 代码:

filenames=dir() #Scan file names
 for (i in filenames){
  adt = substr(x = i, start = 1, stop = nchar(i)-4)
  name=paste("data_", adt, sep="")
  tmp <- read.csv(i, header=TRUE, sep=",")
  assign(name, tmp, pos=.GlobalEnv)  #save all the imported CSV content
  FB_d <- data.frame(cbind(tmp[,2]))  # I would like add the second column to a new variable, and I failed here...
}

感谢您的任何建议。

更新

我试过FB_d <- cbind(FB_d,tmp2[,1])了,但由于找不到而出错'FB_d'

4

2 回答 2

2

我会选择更像这样的东西:

write.csv(mtcars[1:5,],file = "~/Desktop/folder/file1.csv")
write.csv(mtcars[6:10,],file = "~/Desktop/folder/file2.csv")

setwd("~/Desktop/folder")

f <- list.files("~/Desktop/folder")

dat <- lapply(f,read.csv)
names(dat) <- paste0("data_",substr(f,1,nchar(f)-4))

do.call(cbind,lapply(dat,'[[',2))

即尽可能使用矢量化和列表结构。另外,我会(暂时)assign从你的词汇表中删除。它是一种高级功能,用于在特定情况下非常特殊的用途,不应普遍用于“普通”目的。

我还应该添加一个警告,即cbind大量(大)列将很快变得相当慢,该问题的解决方案是首先初始化您的数据结构(预分配),然后分配给它。

于 2012-09-17T03:14:44.263 回答
0

我喜欢使用这种方法加载 csv,如果不是特别有效的话:

fileList = list.files(path='path/to/files', pattern='xxxx.csv') 
FB_d <- vector()
dat<-lapply(fileList,read.csv,header=T,sep = "\t") #and then 
for(i in 1:length(dat)) {
  #do stuff here
  data_from_csv <- as.data.frame(dat[i])

  ##EDIT--adding to vector for each loop
  FB_d <- append(FB_d, data_from_csv[,2])

}
于 2012-09-17T02:26:04.903 回答