Вставьте несколько столбцов в один столбец, но удалите все значения NA, пробелы или дубликаты - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть данные, которые выглядят так:

dat <- data.frame(SOURCES1 = c("123 Name, 123 Rd, City, State", 
                               "354 Name, 354 Rd, City, State",
                               NA,"",""),
                  SOURCES2 = c("","",
                               "321 Name, 321 Rd, City, State", 
                               "678 Name, 678 Rd, City, State",
                               ""),
                  SOURCES3 = c("","",NA,
                               "678 Name, 678 Rd, City, State", 
                               NA),
                  SOURCES4 = c("","","",NA,NA),
                  SOURCES5 = c("","","",NA,NA))

И я хочу создать столбец, который выглядит следующим образом:

"123 Name, 123 Rd, City, State"
"354 Name, 354 Rd, City, State"
"321 Name, 321 Rd, City, State"
"678 Name, 678 Rd, City, State"
NA

1 Ответ

0 голосов
/ 20 декабря 2018

Мы можем coalesce после преобразования пробелов ("") в NA

library(tidyverse)
dat %>% 
   mutate_all(funs(na_if(as.character(.), ''))) %>% 
   transmute(SOURCE = coalesce(!!! rlang::syms(names(.))))
#                         SOURCE
#1 123 Name, 123 Rd, City, State
#2 354 Name, 354 Rd, City, State
#3 321 Name, 321 Rd, City, State
#4 678 Name, 678 Rd, City, State
#5                          <NA>   

Или использовать invoke из purrr

dat %>% 
   mutate_all(funs(na_if(as.character(.), ''))) %>% 
   transmute(SOURCE = invoke(coalesce, .))
#                         SOURCE
#1 123 Name, 123 Rd, City, State
#2 354 Name, 354 Rd, City, State
#3 321 Name, 321 Rd, City, State
#4 678 Name, 678 Rd, City, State
#5                          <NA>

Или с pnax из base R

do.call(pmax, c(lapply(dat, function(x) replace(as.character(x), 
          x=="", NA)), na.rm = TRUE))             
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...