Заполните недостающие данные на основе двух ранее существующих факторов - PullRequest
0 голосов
/ 09 ноября 2018

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

a <- c(1:9)
b <- as.factor(c("Day", "Day", NA, "Night", NA, "Day", NA, "Night", "Night"))
df<-data.frame(a=a,b=b)

Я бы хотел условно заменить значения NA на основе уже существующих значений, чтобы создать это:

df$a <- c(1:9)
df$b <- as.factor("Day", "Day", "Dusk", "Night", "Dawn", "Day", "Dusk", "Night", "Night")

Я исследовал с помощью na.locf () и fill (), но пока не смог найти решение.

1 Ответ

0 голосов
/ 09 ноября 2018
require(dplyr)
df %>% mutate(b=as.factor(case_when(is.na(b) & lag(b)=="Day" ~ "Dusk",
                 is.na(b) & lag(b)=="Night" ~"Dawn",
                 TRUE ~ as.character(b))))

  a     b
1 1   Day
2 2   Day
3 3  Dusk
4 4 Night
5 5  Dawn
6 6   Day
7 7  Dusk
8 8 Night
9 9 Night

Этот подход использует dplyr для изменения b и изменения любого NA, следующего за «Day», на «Dusk», и любого NA, следующего за «Night», на «Dawn», оставляя все остальное как есть (включая любые ведущие НС, если таковые были).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...