使用dplyr在R数据框中补全缺失小时并填充NA
R数据框缺失小时记录补全方案(基于dplyr实现)
前置依赖
需要搭配dplyr和tidyr包使用,tidyr的complete函数是补全行的核心工具,二者均属于tidyverse生态,和dplyr语法完全兼容。
实现步骤
1. 数据格式预处理
先确保datex字段为标准日期类型,避免后续匹配出错:
library(dplyr) library(tidyr) mydata <- mydata %>% mutate(datex = as.Date(datex, format = "%Y/%m/%d"))
2. 补全缺失记录
提供两种常用方案,按需选择:
方案一:全局补全所有日期的全时段记录
自动给数据中所有存在的日期补全0-23时的全部小时记录,缺失的sales默认填充为NA,通用性最强:
mydata_complete <- mydata %>% complete(datex, hourx = 0:23)
方案二:仅补全指定日期的缺失小时
如果仅需要补全问题中提到的3个日期的缺失记录,其余日期保持原有不变,可使用以下代码:
mydata_complete <- mydata %>% group_by(datex) %>% group_modify(~ if (cur_group()$datex %in% as.Date(c("2021-07-04", "2021-07-31", "2021-08-08"))) { complete(.x, hourx = 0:23) } else { .x }) %>% ungroup()
3. 结果验证
可通过以下代码查看目标日期的补全效果:
mydata_complete %>% filter(datex %in% as.Date(c("2021-07-04", "2021-07-31", "2021-08-08"))) %>% arrange(datex, hourx) %>% print(n = Inf)
内容的提问来源于stack exchange,提问作者Faryan
相关产品推荐
相关产品推荐

