很抱歉如果这个问题太基础了,但我已经搜遍了互联网,似乎找不到一个简单的解决方法。
目前我有一系列的R对象(命名向量或仅包含1个变量的数据框,两者都可以),我想将它们合并成一个大型数据框,每个唯一名称/行名为1行,原始列表中的每个元素为1列。
我的起始列表看起来像:
l1 <- list(df1 = data.frame(c(1,2,3), row.names = c("A", "B", "C")),
df2 = data.frame(c(2,6), row.names = c("B", "D")),
df3 = data.frame(c(3,6,9), row.names = c("C", "D", "A")),
df4 = data.frame(c(4,12), row.names = c("A", "E")))
我希望你能够将输出结果变成这个样子:
data.frame("df1" = c(1,2,3,NA,NA),
+ "df2" = c(NA,2,NA,6,NA),
+ "df3" = c(9,NA,3,6,NA),
+ "df4" = c(4,NA,NA,NA,12), row.names = c("A", "B", "C", "D", "E"))
df1 df2 df3 df4
A 1 NA 9 4
B 2 2 NA NA
C 3 NA 3 NA
D NA 6 6 NA
E NA NA NA 12
我不介意填充值为NA或0(最终我想要0,但这很容易解决)。
我几乎可以确定plyr :: cbind.fill
正好做到了这一点,但是我在脚本的其余部分中使用了dplyr,而且我认为同时使用两者不是一个好主意。 dplyr :: bind_cols
似乎不能处理不同长度的向量。我知道这里已经提出了一个非常类似的问题:R:是否有一个很好的替代方法可以在dplyr中替换plyr :: rbind.fill?但是正如我所提到的,这个解决方案似乎并不起作用。即使包装在do.call
中,dplyr :: full_join
也不起作用。是否有简单的解决方案,还是唯一的解决方案是编写自定义函数?
data.frame
中放置了一个没有名称的向量,所以你得到了像c.1..2..3.
这样混乱的名称。 - camille