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

如何在dplyr中结合group_by实现均值、求和及有效样本量统计

解决方法

你可以直接在across的函数列表中新增有效样本量的计算逻辑即可,R中统计非NA值的数量可通过sum(!is.na(列名))实现,修改后的代码如下:

df <- df %>%
  group_by(Year, `School Name`) %>% 
  summarise(
    across(where(is.numeric), 
           .f = list(
             mean = ~mean(.x, na.rm = TRUE),
             valid_n = ~sum(!is.na(.x))
           ))
  )

代码说明

  • 用where(is.numeric)限定仅对数值列做计算,避免分组用的年份、学校名字段被错误处理
  • 每个得分列会生成两个结果列:后缀为_mean的是平均得分,后缀为_valid_n的是计算该均值时用到的有效样本量(即该列在分组内非NA的数值个数)
  • 不要直接用n()统计样本量,n()返回的是分组内的总记录数,不会排除对应列是NA的记录,不符合有效样本量的统计需求

如果你需要统计分组内至少有一门成绩非NA的学生总数,可以在summarise中额外新增计算逻辑:

df <- df %>%
  group_by(Year, `School Name`) %>% 
  summarise(
    across(where(is.numeric), 
           .f = list(
             mean = ~mean(.x, na.rm = TRUE),
             valid_n = ~sum(!is.na(.x))
           )),
    # 统计至少有一个得分非NA的学生总数
    total_valid_stu = sum(if_all(starts_with("Student Score"), ~!is.na(.x)))
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:45:02