r - 根据两个预先存在的因素填充缺失数据
问题描述
我有一个这样的数据框:
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() 进行了探索,但还没有完全找到解决方案。
解决方案
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,如果有的话)。
推荐阅读
- excel - 将单元格的文本存储在字符串变量 VBA 中
- javascript - 如何在 React 和 Typescript 中使用 useRef 钩子和 getClientBoundingRect?
- javascript - 我如何修复我的代码以将每个段落放在一个新行中,因为我试图在给定段落之前添加段落
- php - 需要具有不同主题相同数据库的重复 Drupal 7 站点,有什么建议吗?
- javascript - 在没有 Webpack/Bundlers 的 PHP 中镜像 Vue 组件
- php - PHP调试mysqli连接,mysqli实例不能正常工作?
- python - 在一个非常大的数据集中找到一个不同长度的数组中的先前值,以提高内存效率,而它目前无法完成
- powershell - Skip Drive during Powershell Iteration
- sql - 如何根据列的累积总和创建不相等的十分位数/四分位数
- reactjs - SharePoint 框架 creatRef 对象未定义