You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按每20行分组计算mean、sd、min、max等统计指标

问题解决方法

现有代码错误原因

你在by的匿名函数中调用sumtable时传入的是全局数据集df,而非每个分组对应的子集x,导致每次都对全量数据做统计,无法得到分组结果。

修正后的by函数实现

直接将sumtable的入参替换为分组子集即可:

library(vtable)

df <- read.csv(...)
# 生成分组索引,每20行一组
idx <- ceiling(seq(nrow(df))/20)
valuesm <- by(df, idx, function(x){
  sumtable(data = x, out = 'return', title = '', 
           summ = c('notNA(x)', 'mean(x)', 'sd(x)', 'min(x)', 'max(x)'))
})

运行后valuesm是长度为50的列表,每个元素对应一组的统计结果。如果需要合并为总表,可以追加以下代码:

# 拼接所有分组结果,新增组号列
final_result <- do.call(rbind, lapply(names(valuesm), function(gid) {
  cbind(group_id = as.integer(gid), valuesm[[gid]])
}))

可选dplyr实现方案

如果习惯用tidyverse语法,也可以用以下代码实现,逻辑更直观:

library(dplyr)

df <- read.csv(...)
df %>%
  # 生成分组编号
  mutate(group_id = ceiling(row_number() / 20)) %>%
  group_by(group_id) %>%
  # 对所有数值列计算指定统计指标,自动忽略非数值列
  summarise(across(where(is.numeric), 
                   list(
                     notNA = ~sum(!is.na(.)),
                     mean = ~mean(., na.rm = TRUE),
                     sd = ~sd(., na.rm = TRUE),
                     min = ~min(., na.rm = TRUE),
                     max = ~max(., na.rm = TRUE)
                   )))

内容的提问来源于stack exchange,提问作者gahh13 gahh13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:45:02