在r中使用if-else合并2列

时间:2017-05-15 17:41:41

标签: r if-statement dplyr mutate

我在数据框中有两列,如此

name1     name2
 <NA>      SAM
 JIM       <NA>
 <NA>      <NA>

我正在尝试获取像这样的合并列

name1     name2      name3
 <NA>      SAM        SAM
 JIM       <NA>       JIM
 <NA>      <NA>       <NA>

我希望列name3中的name1name2值中的任何一个都不是NA

我尝试使用

df %>% mutate( name3 = ifelse( is.na(name1), name2, name1) )

我阅读了有关ifelse()的帖子,它将逻辑向量的大小作为输入here返回。

df %>% mutate( name3 = ifelse( is.na(name1), return(name2), return(name1)) )

但我仍然得到1作为输出 - 我不知道为什么。

1 个答案:

答案 0 :(得分:2)

我们可以使用coalesce中的dplyr(假设列为character类)

library(dplyr)
df1 %>% 
    mutate(name3 = coalesce(name1, name2))
#    name1 name2 name3
#1  <NA>   SAM   SAM
#2   JIM  <NA>   JIM
#3  <NA>  <NA>  <NA>

获得1的原因是因为列是factor。将列类更改为characterifelse应该可以正常工作

df1 %>% 
   mutate_all(as.character) %>% 
   mutate(name3 = ifelse(is.na(name1), name2, name1)) 
#  name1 name2 name3
#1  <NA>   SAM   SAM
#2   JIM  <NA>   JIM
#3  <NA>  <NA>  <NA>