Преобразование датафрейма NA в указанные c элементы - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть фрейм данных, как;

dataframe <- data.frame(ID1=c(NA,2,3,1,NA,2),ID2=c(1,2,3,1,2,2))

Теперь я хочу преобразовать значение NA в значение, которое совпадает со значением следующего столбца;

dataframe <- data.frame(ID1=c(1,2,3,1,2,2),ID2=c(1,2,3,1,2,2))

Я думаю, мне следует использовать функцию if , но я хочу использовать %>% для упрощения. Пожалуйста, научи меня.

Ответы [ 3 ]

1 голос
/ 05 февраля 2020

раствор ifelse

dataframe <- within(dataframe, ID1 <- ifelse(is.na(ID1),ID2,ID1))

такой, что

> dataframe
  ID1 ID2
1   1   1
2   2   2
3   3   3
4   1   1
5   2   2
6   2   2
0 голосов
/ 05 февраля 2020

Простое решение состоит в том, чтобы найти NA значения в ID1 и заменить их соответствующими значениями из ID2.

inds <- is.na(dataframe$ID1)
dataframe$ID1[inds] <- dataframe$ID2[inds]

Однако, так как вам нужно решение с трубами, вы можете использовать coalesce из dplyr

library(dplyr)
dataframe %>%  mutate(ID1 = coalesce(ID1, ID2))

#  ID1 ID2
#1   1   1
#2   2   2
#3   3   3
#4   1   1
#5   2   2
#6   2   2
0 голосов
/ 05 февраля 2020

A dplyr (с использованием %>%) решение:

sanitized <- dataframe %>% 
  mutate(ID1 = ifelse(is.na(ID1), ID2, ID1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...