多数据帧的Mass rbind.fill

多数据帧的Mass rbind.fill,r,for-loop,merge,row,rbind,R,For Loop,Merge,Row,Rbind,我试图将多个数据帧按行绑定到单个海量数据帧中。数据帧按顺序命名,第一个命名为df1,第二个命名为df2,第三个命名为df3,等等。目前,我已通过显式键入数据帧的名称将这些数据帧绑定在一起;但是,对于大量数据帧(预计总共大约10000个数据帧),这是次优的 以下是一个工作示例: # Load required packages library(plyr) # Generate 100 example data frames for(i in 1:100){ assign(paste0('d

我试图将多个数据帧按行绑定到单个海量数据帧中。数据帧按顺序命名,第一个命名为
df1
,第二个命名为
df2
,第三个命名为
df3
,等等。目前,我已通过显式键入数据帧的名称将这些数据帧绑定在一起;但是,对于大量数据帧(预计总共大约10000个数据帧),这是次优的

以下是一个工作示例:

# Load required packages
library(plyr)

# Generate 100 example data frames
for(i in 1:100){
   assign(paste0('df', i), data.frame(x = rep(1:100),
                                      y = seq(from = 1,
                                              to = 1000,
                                              length = 100)))
  }
}

# Create a master merged data frame
 df <- rbind.fill(df1, df2, df3, df4, df5, df6, df7, df8, df9, df10,
             df11, df12, df13, df14, df15, df16, df17, df18, df19, df20,
             df21, df22, df23, df24, df25, df26, df27, df28, df29, df30,
             df31, df32, df33, df34, df35, df36, df37, df38, df39, df40,
             df41, df42, df43, df44, df45, df46, df47, df48, df49, df50,
             df51, df52, df53, df54, df55, df56, df57, df58, df59, df60,
             df61, df62, df63, df64, df65, df66, df67, df68, df69, df70,
             df71, df72, df73, df74, df75, df76, df77, df78, df79, df80,
             df81, df82, df83, df84, df85, df86, df87, df88, df89, df90,
             df91, df92, df93, df94, df95, df96, df97, df98, df99, df100)
#加载所需的包
图书馆(plyr)
#生成100个示例数据帧
因为(我在1:100){
赋值(粘贴0('df',i),数据帧(x=rep(1:100),
y=序列(从=1,
to=1000,
长度=100)))
}
}
#创建主合并数据帧

df
do.call
很方便。指定的函数在参数列表上工作

library(plyr)
df.fill <- lapply(ls(pattern = "df"), get)
df <- do.call("rbind.fill", df.fill)

> str(df)
'data.frame':   10000 obs. of  2 variables:
 $ x: int  1 2 3 4 5 6 7 8 9 10 ...
 $ y: num  1 11.1 21.2 31.3 41.4 ...
库(plyr)

df.fill或使用
数据。表::rbindlist
。将
fill
设置为true以处理缺少的值(如果有)

rbindlist(mget(ls(pattern="df")), fill=TRUE)

         x          y
    1:   1    1.00000
    2:   2   11.09091
    3:   3   21.18182
    4:   4   31.27273
    5:   5   41.36364
   ---               
 9996:  96  959.63636
 9997:  97  969.72727
 9998:  98  979.81818
 9999:  99  989.90909
10000: 100 1000.00000

我们可以从
dplyr

library(dplyr)
res <- bind_rows(mget(paste0("df", 1:100)))
库(dplyr)

res如果您已经将df作为一个列表,其中包含从1到100的所有数据集,那么您可以使用for循环,如下所示:


new\u list您忘记提到了
rbind.fill
的来源。很抱歉——我为以后可能有此问题的其他人更新了上面的代码。是的,尽管
mget(ls(pattern=“df”)
会略微缩短列表的创建时间。是的,但是您有名称我不完全确定您的意思,理查德?对不起,我是指最近的邮件的评论,因为
mget
返回一个命名列表。但我想这没关系。