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

如何用data.frame按ID分组统计days>20的记录数并填充全组?

实现data.frame分组计数并填充所有行的方法

我来帮你搞定这个需求!你想要给每个ID对应的所有行,都填充该ID下满足days > 20的记录总数,之前用data.table的写法只给符合条件的行赋值,下面用base R和tidyverse两种方案来实现:

方案一:Base R的ave()函数(无需额外包)

首先先构造你的示例数据框:

dataset1 <- data.frame(
  ID = c(1, 1, 1, 2, 2),
  days = c(2, 31, 22, 24, 19)
)

然后用ave()函数完成分组计数并填充:

dataset1$Count <- with(dataset1, ave(days > 20, ID, FUN = sum))

原理说明:

  • days > 20会生成一个逻辑向量,其中TRUE等价于1,FALSE等价于0
  • ave()函数按照ID分组,对每组的逻辑向量求和,就能得到该ID下满足条件的记录数
  • 最终结果会自动匹配原数据的行数,给同一ID的所有行都填充相同的Count值

方案二:用dplyr包(tidyverse风格,代码更直观)

如果你习惯使用tidyverse工具链,用dplyr的分组操作会更清晰:

library(dplyr)

dataset1 <- dataset1 %>%
  group_by(ID) %>%          # 按ID分组
  mutate(Count = sum(days > 20)) %>%  # 新增Count列,计算每组符合条件的数量
  ungroup()                 # 取消分组(可选,避免后续操作受分组影响)

运行任意一种方案后,你都会得到期望的结果:

ID | days | Count
1  | 2    | 2
1  | 31   | 2
1  | 22   | 2
2  | 24   | 1
2  | 19   | 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:04:53