我试图将许多数据帧绑定到一个大型数据帧中。数据框按顺序命名,第一个命名为df1
,第二个命名为df2
,第三个命名为df3
等。目前,我已通过显式键入名称将这些数据框绑定在一起数据帧;但是,对于非常大量的数据帧(预计总数大约为10,000个数据帧),这是次优的。
这是一个有效的例子:
# 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)
对于如何优化这一点的任何想法都将非常感激。
答案 0 :(得分:6)
或data.table::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
答案 1 :(得分:4)
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 ...
答案 2 :(得分:0)
我们可以使用bind_rows
dplyr
library(dplyr)
res <- bind_rows(mget(paste0("df", 1:100)))
答案 3 :(得分:0)
如果您已经将df作为包含从1到100的所有数据集的列表,则可以使用如下所示的for循环:
new_list <- list()
for(i in 1:100){
new_list <- rbind.fill(newlist, data.frame(df[[i]]))
}