我想知道如何计算引入新ID(+1)和删除ID(-1)时的过渡表。
例如:
library(data.table)
dt <- data.table(id = c(1,2,3,1,2,3,4,5,1,2,4,5),
year = c(2015, 2015, 2015, 2016, 2016, 2016, 2016, 2016, 2017, 2017, 2017, 2017))
ids <- unique(dt$id)
因此,第一年(2016年)应该是:
0, 0, 0, 1, 1
第二年(2017年)应为:
0, 0, -1, 0, 0
答案 0 :(得分:0)
这里是一种替代方法,它使用交叉联接和聚集联接。它本质上与上面的dcast()
和table()
解决方案等效,但是将数据保留为长格式:
dt[CJ(year = year, id = id, unique = TRUE), on = .(id, year), .N, by = .EACHI][
, change := N - shift(N), by = id][]
id year N change 1: 1 2015 1 NA 2: 2 2015 1 NA 3: 3 2015 1 NA 4: 4 2015 0 NA 5: 5 2015 0 NA 6: 1 2016 1 0 7: 2 2016 1 0 8: 3 2016 1 0 9: 4 2016 1 1 10: 5 2016 1 1 11: 1 2017 1 0 12: 2 2017 1 0 13: 3 2017 0 -1 14: 4 2017 1 0 15: 5 2017 1 0