r - data.table 列上的差异

标签 r data.table diff rollapply

对此真的很沮丧。我只想在 data.table 中的行之间进行区分。其中差异(n)=值(n)-值(n-1)。因此,与我所拥有的相比,结果应该移动 1 个位置,并且每个“变量”的第一个位置应该是 NA。即差异应该是 (NA, 4, -2, NA, 1, -8)。每个“变量的第一个值应该是 NA,因为没有位置 n-1。知道如何修改函数来实现这一点吗?为了我自己的理解,我真的很想知道如何使用 rollapplyr 做到这一点.

谢谢。

数据表:

> dt
       variable value
    1:      xyz     3
    2:      xyz     7
    3:      xyz     5
    4:      abc     9
    5:      abc    10
    6:      abc     2
> dt[,dif := rollapplyr(value, 2, function(x){r <- diff(x,lag = 1)}, align = "right"), by = list(variable)]

> dt
   variable value dif
1:      xyz     3   4
2:      xyz     7  -2
3:      xyz     5   4
4:      abc     9   1
5:      abc    10  -8
6:      abc     2   1

最佳答案

我们可以使用 shift() :

dt[,diff := value - shift(value), by = variable]
> dt
   variable value diff
1:      xyz     3   NA
2:      xyz     7    4
3:      xyz     5   -2
4:      abc     9   NA
5:      abc    10    1
6:      abc     2   -8

关于r - data.table 列上的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141277/

相关文章:

R 如何改变行的子集

recursion - 如何使用 Clearcase 递归地比较目录下所有 checkout 文件的所有修改?

linux - 在 Unix/Linux 中判断两个文件是否具有相同内容的最快方法?

java - 将转换后的(删除和创建的)文件与 git 进行比较

r - 仅绘制点的子集?

r - 在 R 中使用 marrangeGrob 和 ggsave 的多页 PDF 的页面标题

r - 如何确定线性回归中使用了哪些观察值?

r - 将大型数据集加载到 R 中的最快方法和最快格式是什么

r - 保存时空的R环境变成大文件

r - 为什么rbindlist是 "better"而不是rbind?