我有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)
以上内容非常耗时。是否有替代方法可以轻松组合所有数据框
答案 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