R语言按每5行分组计算含缺失值的均值问题咨询
实现方案
核心逻辑
你之前的问题根源是分组逻辑和NA处理的顺序错了:先按原始行顺序每5行固定分组(完全不考虑NA的存在),再在每个固定分组内计算非NA值的均值,就能完全满足需求,不会出现跨组取有效值的问题。
代码实现
tidyverse 方案(推荐)
library(dplyr) df_result <- df %>% # 按行号每5行分一组,和value列有没有NA完全无关 mutate(group_id = (row_number() - 1) %/% 5 + 1) %>% group_by(group_id) %>% summarise( # 组内仅排除NA计算均值,不会跨组取数 value_mean = mean(value, na.rm = TRUE), # 可选:保留每组的起始时间方便核对 起始时间 = first(时间) )
base R 方案
# 生成组号 df$group_id <- cut(seq(nrow(df)), breaks = seq(0, nrow(df), by = 5), labels = FALSE) # 分组计算均值 df_result <- aggregate(value ~ group_id, df, function(x) mean(x, na.rm = TRUE))
示例结果验证
拿你提供的示例数据计算,得到的结果如下:
| group_id | value_mean |
|---|---|
| 1 | 22.3333 |
| 2 | 24.5 |
| 3 | 28 |
| 4 | 25 |
完全符合你要求的分组规则:固定每5行一组,组内仅对非NA值求均值。
内容的提问来源于stack exchange,提问作者lunae_majicam
相关产品推荐
相关产品推荐

