首页 > 解决方案 > 根据两个预先存在的因素填充缺失数据

问题描述

我有一个这样的数据框:

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() 进行了探索,但还没有完全找到解决方案。

标签: rdataframe

解决方案


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


推荐阅读