如何用其他列替换数据框中的NA

时间:2018-12-09 07:05:45

标签: r

我想合并列以创建新列:

      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对行进行求和的,但不适用于变量是字符的情况。

1 个答案:

答案 0 :(得分:2)

使用coalesce包中的dplyr

df$m <- coalesce(df$x, df$y, df$z)

coalesce的行为与SQL函数相同,只是R中的NA代替了SQL中的NULL。上面的代码将按顺序从NAxy列中返回第一个非z值。

对于纯基本R选项,我们可以尝试将ifelseis.na结合使用:

df$m <- ifelse(!is.na(df$x), df$x,
            ifelse(!is.na(df$y), df$y, df$z))