我在数据框中有两列,如此
name1 name2
<NA> SAM
JIM <NA>
<NA> <NA>
我正在尝试获取像这样的合并列
name1 name2 name3
<NA> SAM SAM
JIM <NA> JIM
<NA> <NA> <NA>
我希望列name3
中的name1
或name2
值中的任何一个都不是NA
。
我尝试使用
df %>% mutate( name3 = ifelse( is.na(name1), name2, name1) )
我阅读了有关ifelse()的帖子,它将逻辑向量的大小作为输入here返回。
df %>% mutate( name3 = ifelse( is.na(name1), return(name2), return(name1)) )
但我仍然得到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
。将列类更改为character
,ifelse
应该可以正常工作
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>