如何使用data.table在R中计算转换表?

时间:2018-07-08 07:45:56

标签: r data.table

我想知道如何计算引入新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

1 个答案:

答案 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