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

在R语言中为数据集添加列以统计A列值的重复次数

给data.frame添加列展示分组重复次数的简便方法

针对你的需求,这里提供两种简洁的实现方式,同时说明你之前代码无效的原因:

Base R 方案

用ave()函数可以一步到位,直接按A列分组计算每个值的出现次数,并自动匹配到每一行:

people$C <- ave(rep(1, nrow(people)), people$A, FUN = sum)

原理很简单:先生成和数据行数一致的全1向量,按A列分组后对这些1求和,得到的就是每个分组的总重复次数,ave会自动把结果对应到原数据的每一行。

tidyverse (dplyr) 方案

如果平时习惯用tidyverse生态,用分组+新增列的方式更直观:

library(dplyr)
people <- people %>%
  group_by(A) %>%
  mutate(C = n()) %>%
  ungroup()

group_by(A)按A列分组,mutate(C = n())给每个分组添加当前组的行数(也就是该值的重复次数),最后ungroup()取消分组,避免后续操作受分组状态影响。

你的aggregate代码为什么无效?

你之前写的people <-aggregate(people$A, people, lengths)逻辑不对:aggregate的第二个参数是分组依据(这里会按A和B的组合分组,但B列全为Student,实际等价于按A分组),但lengths在这里的作用对象是分组后的people$A子集,而aggregate默认会将分组后的列简化,导致lengths返回的是单个元素的长度而非分组总长度,所以最终得到的全是1。如果一定要用aggregate,正确的做法是先统计次数再合并,但这种方法远不如前面两种简便:

# aggregate的正确用法(仅作参考)
count_df <- aggregate(A ~ A, data = people, FUN = length)
colnames(count_df)[2] <- "C"
people <- merge(people, count_df, by = "A")

运行上述任意一种推荐方法后,你的people数据框会新增列C,值依次为3、3、3、2、2、1,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:30:18