使用ls()作为输入来合并R中的csv文件

时间:2017-08-04 16:13:29

标签: r csv merge

我正在尝试合并R中的许多csv文件。当我手动输入两个csv文件的名称时,它们共享一个公共列,并且merge命令正常工作。但是,每次需要执行此操作时,我都会输入太多文件来输入所有名称。

这很好用:

test <- merge(quant_dysmorph_data.csv, srs_adult.csv, by = "individual", all 
= TRUE)

我可以为看起来很好的合并命令的输入做类似的事情:

cat(ls(pattern = ".csv"), sep = ",")

返回: bapq.csv,bapq_raw.csv,bapq_recode.csv,fhi_informant.csv,fhi_interviewer.csv,fhi_subject.csv,quant_dysmorph_data.csv,srs_adult.csv(依此类推等等。抱歉,评论框不会将其格式化为输出正确...)

但是,当我使用它作为merge命令的输入时,我收到一个错误:

x <- merge(cat(ls(pattern = ".csv"), sep = ","), by = "individual", all = 
TRUE)

返回:

Error in as.data.frame(y) : argument "y" is missing, with no default
7.as.data.frame(y)
6.as.data.frame(y)
5.nrow(y <- as.data.frame(y))
4.merge.data.frame(as.data.frame(x), as.data.frame(y), ...)
3.merge(as.data.frame(x), as.data.frame(y), ...)
2.merge.default(cat(ls(pattern = ".csv"), sep = ","), by = "individual", all 
= TRUE)
1.merge(cat(ls(pattern = ".csv"), sep = ","), by = "individual", all = TRUE)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果需要在解决方案中使用ls(),则无法提供帮助。

但是,如果您只想合并一个完整的.csv文件夹,每个文件夹都应该通过一个公共变量合并在一起,那么您可以这样做:

setwd('Drive:/Folder/Subfolder')

fnms<-subset(dir(),substr(dir(),nchar(dir())-3,nchar(dir()))=='.csv')

x<-read.csv(fnms[1])

  for (i in 2:length(fnms)){
temp<-read.csv(fnms[i])
  x <- merge(x,temp, by = "individual", ###or whatever variable you're merging on

all = TRUE)
    }