R:合并大数据帧

时间:2017-06-30 17:19:18

标签: r dataframe dplyr coalesce

假设我创建了一个数据框foo

foo <- data.frame(A=rep(NA,10),B=rep(NA,10))
foo$A[1:3] <- "A"
foo$B[6:10] <- "B"

看起来像,

      A    B
1     A <NA>
2     A <NA>
3     A <NA>
4  <NA> <NA>
5  <NA> <NA>
6  <NA>    B
7  <NA>    B
8  <NA>    B
9  <NA>    B
10 <NA>    B

我可以coalesce将这个列添加到一个列中,如下所示:

data.frame(AB = coalesce(foo$A, foo$B))

给予,

     AB
1     A
2     A
3     A
4  <NA>
5  <NA>
6     B
7     B
8     B
9     B
10    B

这很好。现在,说我的数据框很大,有很多列。如果没有单独命名每列,我如何coalesce?据我所知,coalesce期待向量,所以我不会看到一个干净整洁的dplyr解决方案,我可以在这里找到所需的列并将它们集中传递。有什么想法吗?

修改

根据要求,一个更难的&#34;示例

foo <- data.frame(A=rep(NA,10),B=rep(NA,10),C=rep(NA,10),D=rep(NA,10),E=rep(NA,10),F=rep(NA,10),G=rep(NA,10),H=rep(NA,10),I=rep(NA,10),J=rep(NA,10))
foo$A[1] <- "A"
foo$B[2] <- "B"
foo$C[3] <- "C"
foo$D[4] <- "D"
foo$E[5] <- "E"
foo$F[6] <- "F"
foo$G[7] <- "G"
foo$H[8] <- "H"
foo$I[9] <- "I"
foo$J[10] <- "J"

我如何coalesce这一点而不必写:

data.frame(ALL= coalesce(foo$A, foo$B, foo$C, foo$D, foo$E, foo$F, foo$G, foo$H, foo$I, foo$J))

2 个答案:

答案 0 :(得分:2)

您可以使用do.call(coalesce, ...),这是一种使用大量参数编写函数调用的简单方法:

library(dplyr)
do.call(coalesce, foo)
# [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J"

答案 1 :(得分:0)

你可以使用这个(purrr的文档:pmap)

coalesce(!!!foo)