【发布时间】:2018-10-16 21:30:54
【问题描述】:
给定一个数据框列表,像这样
[[1]]
ID X1 X2 X3 X4 X5
123 1 2 1 0 4
123 2 4 1 2 2
123 0 0 1 0 2
567 2 3 4 0 2
899 2 3 5 3 5
[[2]]
ID X1 X2 X3 X4
123 7 1 3 2
452 1 3 6 3
899 2 1 4 2
[[3]]
ID X1 X2 X3 X4 Y1
123 4 2 5 0 1
567 0 1 2 0 2
567 1 2 1 0 3
101 2 3 7 2 1
我想在所有其他列中按“ID”聚合所有数据帧,这个插图中的结果应该是这样的
new_df
ID X1 X2 X3 X4 X5 Y1
123 14 9 11 2 8 1
567 3 6 7 0 2 5
899 4 4 9 5 5 0
452 1 3 6 3 0 0
101 2 3 7 2 0 1
这只是一个说明,原始列表有 51 个 dfs,原始 dfs 有数百列,因此该函数无法指定哪些列将聚合,而是应该应用于所有列
提前致谢
【问题讨论】:
-
如果错误发生在
bind_rows...也许data.table::rbindlist也许能够做到(我不太有信心)...也许你的最好的办法是将它们标准化(相同的列名,这意味着您需要“填充”一些空列),将它们转储到单个文件中,然后再试一次。列有多不同?也就是说,在您提供的示例中,从 1 到 2 缺少一列,然后在 3 中添加一个新列......差异的数量相对较小(1s 或 2s)还是差异很大? -
data.table::rbindlist 不起作用。列非常不同,每个 df 中大约有 22-40 列,并且它们都彼此不同。重复的 ID 是什么
-
现在成功了!我单独聚合了列表中的每个 DF,因为原始列表中的列彼此不同,然后将所有 df 与 reduce 合并