【发布时间】:2021-08-27 17:46:28
【问题描述】:
我有一个数据框的子集:
df = data.frame(retailer_id = c(1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
store_id = c(166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167),
quad_id = c(2017010104, 2017012904, 2017010104, 2017012904, 2017022604, 2017032604 ,2017042304, 2017052104, 2017061804,
2017071604, 2017081304, 2017091004, 2017100804, 2017110504, 2017120304, 2017123104, 2018012804, 2018022504, 2018032504, 2018042204))
其中 2017010104 对应于日期 01/01/2017 等等。我试图参考年份顺序标记这些不同的 quad_ids。因此,例如,我正在尝试获取输出:
df = data.frame(retailer_id = c(1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
store_id = c(166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167),
quad_id = c(2017010104, 2017012904, 2017010104, 2017012904, 2017022604, 2017032604 ,2017042304, 2017052104, 2017061804,
2017071604, 2017081304, 2017091004, 2017100804, 2017110504, 2017120304, 2017123104, 2018012804, 2018022504, 2018032504, 2018042204),
Snum = c(1, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 1, 2, 3, 4))
您可以在其中看到,retailer_id = 2,store_id = 167,2017 年的周标记为 1-14,然后当周从 2018 年开始时,它再次从 1 开始按顺序计数,直到到达开始的一周2019 年在此分组中。
我试过了:
DT <- data.table(df)
DT[, Snum := seq_len(.N), by = list(retailer_id, store_id)]
但是,这不是按年份顺序标记,而是按 store_id 顺序标记。有没有办法解决这个问题? (这个示例代码只显示了两个零售商和两个商店,而我的实际数据框和数百个不同的零售商和商店)
【问题讨论】:
标签: r dataframe label grouping sequential