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

R语言计算分组列非NA时对应体重身高的均值、极差等汇总统计量

R实现多分组指标汇总统计方案

tidyverse 实现(推荐)

直接通过长表转换+分组汇总即可实现需求,代码逻辑清晰易读:

library(tidyverse)

# 示例数据
dt <- tibble(
  group1 = c(1, 1, NA, NA, NA, NA),
  group2 = c(NA, NA, 2, 2, NA, NA),
  group3 = c(NA, NA, NA, NA, 3, 3),
  weight = c(3, 2, 3, 5, NA, 7),
  height = c(10, NA, 14, 15, 11, 20)
)

# 统计代码
dt %>%
  # 转换为长表,自动过滤分组列NA值
  pivot_longer(cols = starts_with("group"), 
               names_to = "group", 
               values_to = "group_val",
               values_drop_na = TRUE) %>%
  # 按分组汇总
  group_by(group) %>%
  summarise(
    weight_mean = mean(weight, na.rm = TRUE),
    weight_range = max(weight, na.rm = TRUE) - min(weight, na.rm = TRUE),
    height_mean = mean(height, na.rm = TRUE),
    height_range = max(height, na.rm = TRUE) - min(height, na.rm = TRUE)
  )

运行输出结果:

# A tibble: 3 × 5
  group  weight_mean weight_range height_mean height_range
  <chr>        <dbl>        <dbl>       <dbl>        <dbl>
1 group1         2.5            1        10              0
2 group2         4              2        14.5            1
3 group3         7              0        15.5            9

base R 实现

不需要加载第三方包,用循环即可完成计算:

groups <- c("group1", "group2", "group3")
res <- data.frame()

for (g in groups) {
  sub_data <- dt[!is.na(dt[[g]]), ]
  res <- rbind(res, data.frame(
    group = g,
    weight_mean = mean(sub_data$weight, na.rm = TRUE),
    weight_range = diff(range(sub_data$weight, na.rm = TRUE)),
    height_mean = mean(sub_data$height, na.rm = TRUE),
    height_range = diff(range(sub_data$height, na.rm = TRUE))
  ))
}
res

两种实现的计算结果完全一致,符合要求的计算规则:

  • 仅保留对应分组列非NA的行参与统计
  • 统计时自动跳过体重、身高为NA的样本
  • 输出每个分组的体重、身高的均值和极差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:18:03