我想合并列以创建新列:
x y z
1 A <NA> <NA>
2 <NA> B <NA>
49 <NA> <NA> C
50 <NA> <NA> C
我想要结果:
x y z m
1 A <NA> <NA> A
2 <NA> B <NA> B
49 <NA> <NA> C C
50 <NA> <NA> C C
我检查了以前的答案,它们都是基于使用is.na对行进行求和的,但不适用于变量是字符的情况。
答案 0 :(得分:2)
使用coalesce
包中的dplyr
:
df$m <- coalesce(df$x, df$y, df$z)
coalesce
的行为与SQL函数相同,只是R中的NA
代替了SQL中的NULL
。上面的代码将按顺序从NA
,x
和y
列中返回第一个非z
值。
对于纯基本R选项,我们可以尝试将ifelse
与is.na
结合使用:
df$m <- ifelse(!is.na(df$x), df$x,
ifelse(!is.na(df$y), df$y, df$z))