如何使用R data.table为每个ID的日期生成顺序编号列
用data.table实现按ID分组的日期序号标记
嗨,这个需求用data.table的分组功能就能轻松搞定!咱们一步步来:
首先,先确保你的日期列是日期类型(原始数据里的Date1是字符串,虽然示例里顺序是对的,但规范转换后排序更靠谱):
library(data.table) data = data.table( id = c(1,1,1,2,2,3), Row = c(1,2,3,4,5,6), Date1 = c("2018-01-01", "2018-01-05", "2018-01-21", "2018-02-01", "2018-03-15", "2018-04-01") ) # 转换日期列 data[, Date1 := as.Date(Date1)]
接下来,按id分组,给每个组内生成从1开始的递增序号。这里用到data.table的by参数分组,还有.N(代表每个组的行数):
# 先按id和Date1排序,确保序号是按日期先后生成的 data <- data[order(id, Date1)] # 新增Seq列,每个组内生成1到.N的序列 data[, Seq := seq_len(.N), by = id]
运行完上面的代码后,你的data就会新增一列Seq,取值正好是你想要的1,2,3,1,2,1:
id Row Date1 Seq 1: 1 1 2018-01-01 1 2: 1 2 2018-01-05 2 3: 1 3 2018-01-21 3 4: 2 4 2018-02-01 1 5: 2 5 2018-03-15 2 6: 3 6 2018-04-01 1
简单解释下:seq_len(.N)会为每个分组生成从1到该组总行数的连续整数,完美匹配你要的“首个Date标记1,第二个标记2”的需求。
内容的提问来源于stack exchange,提问作者Diogo Santos
相关产品推荐
相关产品推荐

