是否有R功能来组合许多数据帧

时间:2019-07-06 17:27:01

标签: r

我有2个数据集(c和d)的样本。我已经使用合并命令将它们合并

 c <- data.frame(x=c("a","b"),y=c("c","d"))
 d <- data.frame(x=c("f","g"),y=c("h","e"))
 library(gdata)
 combine(c,d)
  x y source
1 a c      c
2 b d      c
3 f h      d
4 g e      d

好吧。假设我有100个数据框,例如c,d,e,f .....等(具有相同的列)。有没有一种方法可以将所有这些快速合并。否则我需要在下面的命令中调用

 combine(c,d,e,f........) 

 df <- read.csv(file.choose())
 combine(df)

以上内容非常耗时。是否有替代方法可以轻松组合所有数据框

2 个答案:

答案 0 :(得分:3)

您可以使用以下方法在目录中列出要读取的所有文件:

listoffiles <- list.files(pattern = ".csv")

然后循环遍历所有文件,并assign将其df_用作变量名。

for(i in 1:length(listoffiles)) {
   assign(paste0("df_", i), read.csv2(listoffiles[i]))
}

然后搜索全局环境中的所有文件。 然后,您可以指定一个搜索模式,该模式将为"df_",并会生成一个data.frames列表。

dflist <- mget(ls(.GlobalEnv, pattern = "df_"), envir = .GlobalEnv)

然后使用rbindlist中的data.table组合您的data.frame。

> data.table::rbindlist(dflist)
   x y
1: a c
2: b d
3: f h
4: g e

答案 1 :(得分:1)

如果我正确理解了这个问题,则OP在字符向量中具有数据帧的名称,但是数据帧本身是全局环境中的单个对象。在这种情况下,我建议如下。

让它成为数据和字符向量:

 c <- data.frame(x=c("a","b"),y=c("c","d"), stringsAsFactors = FALSE)
 d <- data.frame(x=c("f","g"),y=c("h","e"), stringsAsFactors = FALSE)
 e <- data.frame(x=c("x","y"),y=c("o","p"), stringsAsFactors = FALSE)

 df_names <- c("c", "d","e")

然后用c(mget(...))的dplyr :: bind_rows应该可以完成这项工作。

library(dplyr)   
bind_rows(c(mget(df_names)), .id = "source") 

> source x y
1      c a c
2      c b d
3      d f h
4      d g e
5      e x o
6      e y p