根据两个预先存在的因素填充丢失的数据

时间:2018-11-09 02:15:11

标签: r dataframe

我有一个这样的数据框:

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 :(得分:2)

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,并将“ Day”之后的所有NA更改为“ Dusk”,将“ Night”之后的所有NA更改为“ Dawn”,并保留其他任何内容(如果有的话,包括所有领先的NA)。