我需要合併大型列表(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並修改我不想再次編碼的其他列。我最初做的是手動子集,但我現在需要做得更好。 –