【发布时间】:2017-06-30 17:19:18
【问题描述】:
假设我创建了一个数据框,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 解决方案,我可以从中提取所需的列并集体传递它们。有什么想法吗?
编辑
根据要求,一个“更难”的例子。
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))
【问题讨论】:
-
你能给出一个更难的案例的可重现的例子吗?解决方案将取决于您的数据的排列方式。
-
并非如此,因为它基本上只是我给出的情况,但有很多列。然而,重要的一点是,没有每列中的值相互重叠的情况。也就是说,没有包含 As 和 Bs等的行。但是 - 就像上面的示例一样 - 存在没有值的行(例如,第 4 行和第 5 行)。
-
让我重新表述一下:您需要使用a reproducible minimal example 进行编辑,您的问题才能得到解答。你已经得到了你给出的例子,这使得它不具有代表性。
标签: r dataframe dplyr coalesce