以长的data.table格式计算年份之间的差异

时间:2018-07-07 23:56:22

标签: r data.table

假设我们具有以下数据集:

library(data.table)

t <- data.table(id = c(1,3,1,3,4,1,3, 4),
                year = c(2017, 2017, 2018, 2018, 2018, 2019, 2019, 2019),
                value = c(1,1,3,2,4,5,6, 9))

我想计算(不将其转换为广泛的数据集)某列每年之间的差异。可以安全地假定每年都存在,但并非每年都存在每个id。

结果应类似于以下内容的列: NA,NA,2、1,NA,2、4、5

(当前年度的值减去上一年的值)

由于data.table中变量的标准分配似乎不允许这样做,我将如何进行此计算?

t[, diff := ???]

2 个答案:

答案 0 :(得分:1)

使用shift软件包中的data.table函数。

# Should work with given OP's data (t)
data[, difference := value - shift(value), id]

PS:

  • 请勿使用t作为对象(它是基本的R函数)
  • 请勿使用diff作为列名(这是基本的R函数)

答案 1 :(得分:0)

或使用diff通过'id'求相邻元素的差值

t[,  difference := c(NA, diff(value)), id]