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

在R中按ID对指定问题的取值求平均以创建新列

嘿,我来帮你搞定这个按ID计算指定问题平均值的需求!这在R里其实很容易实现,我给你两种常用的方案,你可以根据自己的习惯选:

方法1:用dplyr包(推荐,代码更直观易读)

如果你平时习惯用tidyverse系列的工具,这个方法会很顺手。先确保你装了dplyr包,没装的话先跑install.packages("dplyr")安装:

library(dplyr)

# 先模拟你的原始数据框(你可以替换成自己的真实数据)
df <- data.frame(
  id = c(1,1,1,2,2,2),
  question = c("abc","def","ghi","abc","def","ghi"),
  qnumber = c(1,2,3,1,2,3),
  value = c(1,3,4,2,5,6)
)

# 核心操作:按ID分组,添加新列存储q1和q2的平均值
df_with_avg <- df %>%
  group_by(id) %>%
  mutate(avg_q1q2 = mean(value[qnumber %in% c(1,2)], na.rm = TRUE)) %>%
  ungroup()

# 查看处理后的数据
print(df_with_avg)

小提示:如果你的数据里question列比qnumber更可靠(比如怕编号对应错),可以把筛选条件换成question %in% c("abc","def"),这样更精准。另外na.rm=TRUE是用来处理可能存在的缺失值,避免计算结果变成NA。

方法2:用Base R(无需额外安装包)

如果不想装新包,用R自带的函数也能实现:

# 同样用上面的示例数据框df
# 第一步:按ID分组,计算q1和q2的平均值
avg_values <- tapply(
  X = df$value[df$qnumber %in% c(1,2)],
  INDEX = df$id[df$qnumber %in% c(1,2)],
  FUN = mean,
  na.rm = TRUE
)

# 第二步:把平均值匹配到原数据框的新列里
df$avg_q1q2 <- avg_values[as.character(df$id)]

# 查看结果
print(df)

这个方法里tapply负责分组计算,之后通过ID匹配把平均值赋值给每一行的新列,效果和第一种方法完全一样。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:50:10