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

如何为含Date与ID的DataFrame按日期生成Attempt计数列

按ID分组并按日期排序生成尝试次数列

你需要为每个ID按日期顺序标记尝试次数,以下是两种可行的解决方案:

示例数据

ID <- c(1,2,5,8,4,9,1,11,15,32,54,1,4,2,14)
Date <- c("2021-04-12", "2021-04-12", "2021-04-13", "2021-04-14", "2021-04-19", 
          "2021-04-19", "2021-04-20", "2021-04-21", "2021-04-22", "2021-04-28", 
          "2021-04-28", "2021-04-29", "2021-04-29", "2021-05-06", "2021-05-07")

Data <- data.frame(ID, Date)
Data$Date <- as.Date(Data$Date, format="%Y-%m-%d")

方法一:Base R 实现

使用ave()函数按ID分组,结合rank()按日期排序生成序号:

Data$Attempt <- ave(as.numeric(Data$Date), Data$ID, FUN = function(x) rank(x, ties.method = "first"))
  • ave() 按ID分组处理每个组的日期数据
  • rank(..., ties.method = "first") 确保即使存在相同日期,也会按记录出现顺序分配序号,完全匹配你需要的计数逻辑

方法二:dplyr 实现(更直观)

如果习惯使用tidyverse工具,用分组排序后生成行号的方式:

library(dplyr)

Data <- Data %>%
  group_by(ID) %>%          # 按ID分组
  arrange(Date, .by_group = TRUE) %>%  # 组内按日期排序
  mutate(Attempt = row_number()) %>%   # 生成组内序号
  ungroup()                 # 取消分组

这种方式逻辑清晰,步骤明确,适合需要多步数据处理的场景。

执行后查看Data,Attempt列会和你期望的结果完全一致:

# 期望的Attempt列:c(1,1,1,1,1,1,2,1,1,1,1,3,2,2,1)

内容的提问来源于stack exchange,提问作者blake.struthers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:15:48