如何每7行计算非日期列平均值?现有代码结果有误且冗长
解决每7行计算非日期列平均值的R实现问题
原代码存在的问题
- 分组时错误使用
bankamerica$Group,应该直接引用列名Group,否则会绕过管道上下文,导致分组逻辑失效。 - 仅针对
tr列计算平均值,未覆盖所有非日期列。 - 手动生成分组标签的步骤可以简化。
简洁的正确实现代码
# 加载工具包并读取数据 library(tidyverse) bankamerica <- read.csv('https://raw.githubusercontent.com/bandcar/Examples/main/bankamerica.csv') # 按每7行分组,计算所有非日期列的平均值 weekly_avgs <- bankamerica %>% group_by(group = gl(nrow(.), 7)) %>% # 自动生成每7行一组的分组标识 summarize(across(-date, mean, na.rm = TRUE)) # 对除date外的所有列计算均值,忽略缺失值
代码说明
gl(nrow(.), 7):通过gl函数自动生成分组因子,将数据按每7行分为一组,即使总行数不是7的倍数,最后一组也会正常保留剩余行。across(-date, mean, na.rm = TRUE):利用across批量处理列,-date指定排除日期列,mean为计算均值的函数,na.rm = TRUE确保忽略数据中的缺失值(如果存在)。
如果不确定日期列的名称,可使用更通用的写法自动识别排除日期/字符型列:
weekly_avgs <- bankamerica %>% group_by(group = gl(nrow(.), 7)) %>% summarize(across(where(~!is.character(.) && !inherits(., "Date")), mean, na.rm = TRUE))
内容的提问来源于stack exchange,提问作者bandcar
相关产品推荐
相关产品推荐

