2017-05-15 66 views
1

我有一個數據幀2列,像這樣合併兩列用的if-else r中

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

我們可以使用​​3210從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>