首页 > 解决方案 > R 来自 Cols 的第一个非 NA 值

问题描述

df <- data.frame(ID=c(1,2,3,4,5,6),
                CO=c(-6,4,2,3,0,2),
                CATFOX=c(1,NA,NA,3,0,NA),
                DOGFOX=c(NA,NA,5,1,2,NA),
                RABFOX=c(NA,3,NA,5,3,NA),
                D=c(0,4,5,6,1,2),
                WANT=c(1,3,5,3,0,NA))

我有一个数据框,我希望列WANT采用不是 NA 的“CATFOX”“DOGFOX”“RABFOX”的第一个值。有data.table解决办法吗?我试过了,但没有产生预期的结果:

df$WANT=do.call(coalesce, data[grepl('FOX',names(data))])

标签: rdata.tablecoalesce

解决方案


coalesce在你的例子中是dplyr' 的构造。尝试fcoalesce

library(data.table)

setDT(df)[, WANT2 := fcoalesce(CATFOX, DOGFOX, RABFOX)]

输出:

   ID CO CATFOX DOGFOX RABFOX D WANT WANT2
1:  1 -6      1     NA     NA 0    1     1
2:  2  4     NA     NA      3 4    3     3
3:  3  2     NA      5     NA 5    5     5
4:  4  3      3      1      5 6    3     3
5:  5  0      0      2      3 1    0     0
6:  6  2     NA     NA     NA 2   NA    NA

推荐阅读