for loop和paste()合并R中的多个数据帧

时间:2013-03-28 02:08:34

标签: r merge dataframe

我有多个相同的数据帧:X1,X2,...,X32

一个数据帧的示例:

> X1
    value
1 3300320

我想像这样拥有一个数据帧:

> XTotal
    value   X
1 3300320   1
2  345098   2
...
32  34355   32

我尝试使用for循环并粘贴(“X”,i,sep =“”),rbind等,但每次我都得到一个类似的字符串列表:

> listDF
1  "X1"
2  "X2"
...
32 "X32"

因此,我无法正确调用每个数据帧将其值放在XTotal数据帧中......

我有点失落,不知道吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

永远不要在循环中生长对象。这是非常低效的,因为它每次都会复制整个对象。

创建data.frames列表使用getlapplymget

dflist <-  mget(paste('X', 1:32), envir = parent.frame()) 
# also valid
# dflist <- lapply(paste('X', 1:32), get)

# to combine them
DFlist <- do.call('rbind', dflist)


# or, faster
library(data.table)
DFlist <- rbindlist(dflist)

如果data.frames没有相同的列/列顺序,请使用rbind.fill中的plyr

library(plyr)
DFlist <- rbind.fill(dflist)

确实没有必要创建dflist明确

以下任何一项也可以使用

rbind.fill(mget(paste('X', 1:32), envir = parent.frame()))
rbindlist(mget(paste('X', 1:32), envir = parent.frame()))
do.call(rbind, mget(paste('X', 1:32), envir = parent.frame()))