Заменить NA в одном столбце значениями другого в dplyr - PullRequest
0 голосов
/ 29 апреля 2020

Допустим, у меня есть следующие данные:

dat <- read.table(text="id_1 id_2 
                  123 NA
                  456 NA
                  NA 3
                  NA 1
                  NA 1", header=T)


> dat
  id_1 id_2
1  123   NA
2  456   NA
3   NA    3
4   NA    1
5   NA    1

Я бы хотел иметь возможность "объединить" эти столбцы, чтобы получить результирующий столбец id, в котором заполнены NA одного столбца со значениями другого столбца. Если в обоих столбцах есть значения, я бы просто вставил уникальные значения в список с запятыми. Вот так:

> dat
  id
1  123   
2  456   
3   3    
4   1   
5   1    

Я пробовал разные итерации по объединению и замене строк, но я не могу найти правильный способ сделать это в цепочке dplyr. Какие-нибудь мысли?

Ответы [ 2 ]

3 голосов
/ 29 апреля 2020

Tidyverse решение:

library(tidyverse)
dat %>%
  transmute(id = coalesce(id_1, id_2))

База R решение:

dat <- within(dat, {id <- ifelse(is.na(id_1), id_2, id_1); rm(id_1); rm(id_2)})
2 голосов
/ 29 апреля 2020

Мы можем использовать unite:

library(dplyr)
library(tidyr)

dat %>%
  mutate_all(as.character) %>%
  unite(id, everything(), na.rm = TRUE, sep = ",")

Если у вас всегда есть только одно значение не-NA в каждой строке, мы можем использовать coalesce.

dat %>%  mutate(id = coalesce(id_1, id_2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...