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

基于日期统计分数≥3的次数并生成新列

基于日期分组统计分数≥3的次数并添加新列

原始数据

ID <- c(1,1,1,1,1,1,1,1,1)
date <- c("2020-12-02","2020-12-03","2020-12-04","2020-12-05","2020-12-06","2020-12-07","2020-12-07","2020-12-08","2020-12-08")
score <- c(2,5,2,2,3,3,1,1,3)
a <- data.frame(ID,date,score)

期望结果

ID <- c(1,1,1,1,1,1,1,1,1)
date <- c("2020-12-02","2020-12-03","2020-12-04","2020-12-05","2020-12-06","2020-12-07","2020-12-07","2020-12-08","2020-12-08")
score <- c(2,5,2,2,3,3,1,1,3)
num_score_greater_than_3 <- c(0,1,0,0,1,1,1,1,1)
a <- data.frame(ID,date,score,num_score_greater_than_3)

解决方案

方法1:使用dplyr包(tidyverse风格,简洁易维护)

如果未安装dplyr,先执行安装命令,然后加载包并处理数据:

# 安装包(首次使用时运行)
# install.packages("dplyr")
library(dplyr)

# 分组统计并添加新列
a <- a %>%
  group_by(date) %>%
  mutate(num_score_greater_than_3 = sum(score >= 3)) %>%
  ungroup()
  • group_by(date):按日期字段分组
  • mutate():在原数据框中新增列,sum(score >=3)统计每组内分数≥3的记录数(逻辑值TRUE等价于1,FALSE等价于0,求和即得到次数)
  • ungroup():取消分组状态,避免后续操作受分组影响

方法2:使用基础R实现(无需额外包)

利用ave()函数直接完成分组统计和赋值:

a$num_score_greater_than_3 <- ave(a$score >= 3, a$date, FUN = sum)
  • ave()函数会对a$score >=3生成的逻辑向量,按a$date分组后应用sum函数,得到每组的统计值,并将结果匹配回原数据的对应行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:42:51