使用R语言dplyr包为多维度数据组合补全缺失小时的中位数
实现代码及说明
依赖包
- 核心依赖
dplyr做分组计算,tidyr做行列补全,均属于tidyverse生态
完整实现代码
# 加载依赖包 library(dplyr) library(tidyr) # 假设你的原始数据集命名为raw_df result_df <- raw_df %>% # 按指定5个维度分组,计算每组transaction的中位数,保留所有原始行 group_by(seller, product, detail, status, channel) %>% mutate(group_median = median(transaction, na.rm = TRUE)) %>% ungroup() %>% # 按日期+5个业务维度分组,为每个分组补全0-23的全部小时值 group_by(datex, seller, product, detail, status, channel) %>% complete(hourx = 0:23) %>% ungroup() %>% # 补全行的transaction缺失值填充为对应组的中位数 mutate(transaction = coalesce(transaction, group_median)) %>% # 可选步骤:删除计算用的中间列 select(-group_median)
关键逻辑说明
group_by+mutate组合不会聚合行,只会给每个分组下的所有行新增对应分组的中位数,完整保留原始数据的全部信息complete函数会自动为每个分组生成0到23的全部hourx值,已存在的行保持不变,缺失的行自动生成,同组的seller/product等维度会自动填充为对应分组的固定值coalesce函数优先取原始transaction的非缺失值,原始值为空的补全行自动取预计算的分组中位数填充
注意事项
- 需确保
hourx字段为数值类型,若为字符型可先通过mutate(hourx = as.integer(hourx))转换后再运行上述代码 - 计算中位数时默认忽略NA值,若需要调整规则可修改
median函数的na.rm参数
内容的提问来源于stack exchange,提问作者Faryan
相关产品推荐
相关产品推荐

