我有以下数据框 df
:
df = data.frame(col1 = c('a','a','a','a','a','b','b','c','d'),
col2 = c('a','a','a','b','b','b','b','a','a'),
height1 = c(NA,32,NA,NA,NA,NA,NA,25,NA),
height2 = c(31,31.5,NA,NA,11,12,13,NA,NA),
col3 = 1:9)
# col1 col2 height1 height2 col3
#1 a a NA 31.0 1
#2 a a 32 31.5 2
#3 a a NA NA 3
#4 a b NA NA 4
#5 a b NA 11.0 5
#6 b b NA 12.0 6
#7 b b NA 13.0 7
#8 c a 25 NA 8
#9 d a NA NA 9
我希望对于每一组
col1, col2
中的值,建立一个名为height
的列,其中包含以下值:
- 如果
height1
和height2
中都只有NA
,则返回NA
。 - 如果在
height1
中有一个值,则取该值。(对于一组col1, col2
,列height1
中最多只有一个非 NA
值) - 如果在
height1
中只有NA
,但在height2
中有一些非 NA
值,则取height2
中的第一个值。
col3
中相应的值。新的
data.frame
new.df
将如下所示:# col1 col2 height col3
#1 a a 32 2
#2 a b 11 5
#3 b b 12 6
#4 c a 25 8
#5 d a NA 9
我更喜欢使用data.frame
方法,它非常简洁,但我意识到我找不到一个!
swval <- any(!is.na(tab[, 3])) + 2* any(!is.na(tab[,4]))
(如果需要,还有更多相同的内容),然后运行switch(swval,[当等于1时的输出],[当等于2时的输出],等等)
。 - Carl Witthoftdplyr
方法那样“干净”...; -) - Cath