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

如何在R中对多列按每n行计算均值并保留分组首行ID?

解决方案

方法1:使用dplyr包(tidyverse风格)

这种方法代码简洁易读,适合熟悉tidyverse生态的用户:

# 先加载dplyr包
library(dplyr)

df <- data.frame(ID = c('a', 'b', 'c', 'c1', 'd', 'e', 'f', 'g', 'h', 'h1'),
                 var2 = c(7, 9, 2, 4, 3, 6, 8, 2, 1, 2),
                 var3 = c(21, 50, 40, 30, 29, 45, 33, 51, 70, 46))

df %>%
  # 按每2行创建分组
  group_by(group = rep(1:(nrow(.)/2), each = 2)) %>%
  # 提取每组首个ID,计算var2和var3的均值
  summarise(ID = first(ID),
            var2 = mean(var2),
            var3 = mean(var3)) %>%
  # 移除临时分组列
  select(-group)

运行后输出结果:

ID    var2  var3
  <chr> <dbl> <dbl>
1 a      8    35.5
2 c      3    35  
3 d      4.5  37  
4 f      5    42  
5 h      1.5  58  

方法2:使用基础R函数

如果不想加载额外包,可以用基础R实现:

df <- data.frame(ID = c('a', 'b', 'c', 'c1', 'd', 'e', 'f', 'g', 'h', 'h1'),
                 var2 = c(7, 9, 2, 4, 3, 6, 8, 2, 1, 2),
                 var3 = c(21, 50, 40, 30, 29, 45, 33, 51, 70, 46))

# 创建每2行一组的分组变量
groups <- rep(1:(nrow(df)/2), each = 2)

# 生成结果数据框
result <- data.frame(
  # 提取每组的第一个ID
  ID = df$ID[!duplicated(groups)],
  # 计算每组var2的均值
  var2 = tapply(df$var2, groups, mean),
  # 计算每组var3的均值
  var3 = tapply(df$var3, groups, mean)
)

# 重置行名(可选)
rownames(result) <- NULL

print(result)

输出结果:

ID var2 var3
1  a  8.0 35.5
2  c  3.0 35.0
3  d  4.5 37.0
4  f  5.0 42.0
5  h  1.5 58.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:05:19