我需要合并大型列表(aprox 15个数据帧[16000x6])。每个数据帧有2个id列"A"
和"B"
加上4列信息。将大型数据帧列表合并到一个数据帧中按列
我想要前两个("A"
和"B"
加上一个数据帧中的15 * 4列)。
我在另一个问题发现这一点:
Reduce(function(x,y) merge(x,y,by="your tag here"),your_list_here)
然而,这,死机我的机器给这个错误,因为它需要太多RAM
In make.unique(as.character(rows)) :
Reached total allocation of 4060Mb: see help(memory.size)
(仅使用3个DFS列表!)
我相信肯定会有更好的策略,我从dplyr
包开始使用bind_cols
,它让我真的快速复制A和B列的数据帧。也许删除这些列,保留前两个是更好的方法。
我提供你一个小玩具列表(减少(...)的策略在这里工作,但我需要另一种解决方案)
dput(mylist)
structure(list(df1 = structure(list(A = c(1, 1, 2, 2, 3, 3),
B = c("Q", "Q", "Q", "P", "P", "P"), x1 = c(0.45840139570646,
0.0418491987511516, 0.798411589581519, 0.898478724062443,
0.064307059859857, 0.174364002654329), x2 = c(0.676136856665835,
0.494200984947383, 0.534940708894283, 0.220597118837759,
0.480761741055176, 0.0230771545320749)), .Names = c("A",
"B", "x1", "x2"), row.names = c(NA, -6L), class = "data.frame"),
df2 = structure(list(A = c(1, 1, 2, 2, 3, 3), B = c("Q",
"Q", "Q", "P", "P", "P"), x1 = c(0.45840139570646, 0.0418491987511516,
0.798411589581519, 0.898478724062443, 0.064307059859857,
0.174364002654329), x2 = c(0.676136856665835, 0.494200984947383,
0.534940708894283, 0.220597118837759, 0.480761741055176,
0.0230771545320749)), .Names = c("A", "B", "x1", "x2"), row.names = c(NA,
-6L), class = "data.frame"), df3 = structure(list(A = c(1,
1, 2, 2, 3, 3), B = c("Q", "Q", "Q", "P", "P", "P"), x1 = c(0.45840139570646,
0.0418491987511516, 0.798411589581519, 0.898478724062443,
0.064307059859857, 0.174364002654329), x2 = c(0.676136856665835,
0.494200984947383, 0.534940708894283, 0.220597118837759,
0.480761741055176, 0.0230771545320749)), .Names = c("A",
"B", "x1", "x2"), row.names = c(NA, -6L), class = "data.frame")), .Names = c("df1",
"df2", "df3"))
你能解释一点点/显示一些代码吗?我如何将15个dfs“存储”在一个循环中以便合并工作?我想到拆分和合并,但又一次,我需要“某处”来放置这些dfs –
你期望重复键发生了什么?我怀疑这是什么炸毁你的电脑。 “1 Q”有两个条目,“3 P”有两个条目。你真的只是想要绑定这些数据集吗? – Zelazny7
@ Zelazny7是的,我确定我想通过id列进行cbind +合并。记住我每DF有16000行,我宁愿有一个16000 * 62比一个巨大的高DF。此外,后来我有很多基于列的代码,许多函数会使用这些id colums并修改我不想再次编码的其他列。我最初做的是手动子集,但我现在需要做得更好。 –