объединить 2 столбца с if-else в r

У меня есть 2 столбца в кадре данных, например

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(), которые возвращают размер логического вектора в качестве входных данных здесь.

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

Но я все еще получаю 1 в качестве вывода - не знаю, почему.


person Dinesh    schedule 15.05.2017    source источник


Ответы (1)


Мы можем использовать 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>
person akrun    schedule 15.05.2017