在R中实现问卷得分计算(含循环方法):按ID计算Q1-Q4平均得分
R语言按ID分组计算问卷得分平均值实现方案
作为R新手完全不需要自己写循环遍历ID,R的内置向量化操作和第三方生态已经封装了更简洁高效的分组统计功能,下面给两种最常用的实现方式:
方式1:使用dplyr包(推荐新手使用,语法可读性高)
这是目前R数据分析领域最常用的工具包,代码逻辑和自然语言描述逻辑一致:
- 首先安装并加载包(已经安装过可以跳过安装步骤)
# 安装包 install.packages("dplyr") # 加载包 library(dplyr)
- 执行分组统计新增列(假设你的数据集命名为
df)
df <- df %>% group_by(ID) %>% # 按ID列分组 mutate(Survey_score = mean(Answer, na.rm = TRUE)) %>% # 每组内计算Answer的平均值作为新列 ungroup() # 解除分组,避免后续操作受分组状态影响
- 参数
na.rm = TRUE的作用是如果答案列存在缺失值,计算时自动忽略缺失值,不会直接返回NA,如果你的数据没有缺失可以去掉这个参数。
方式2:基础R实现(无需安装第三方包)
如果不想装额外的包,可以用R自带的ave函数实现,一行代码就能完成:
df$Survey_score <- ave(df$Answer, df$ID, FUN = function(x) mean(x, na.rm = TRUE))
补充说明
不推荐自己写循环的原因是R是为向量化操作优化的语言,上述内置函数的执行效率远高于手写循环,尤其是数据量超过万行的时候差距会非常明显,同时代码更短也更容易排查错误。
你给出的示例数据运行后,ID为1的所有行Survey_score值为2.25,ID为2的所有行Survey_score值也为2.25,符合需求。
内容的提问来源于stack exchange,提问作者Dr.Data
相关产品推荐
相关产品推荐

