diff в столбце data.table

Действительно разочарован этим. Я просто хочу взять разницу между строками в data.table. где dif(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

2 ответа

Мы могли бы использовать 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

Попробуй это:

dt[,dif := rollapplyr(value, 2, function(x){diff(x,lag = 1)},na.pad=TRUE), by = list(variable)]

> dt
   variable value dif
1:      xyz     3  NA
2:      xyz     7   4
3:      xyz     5  -2
4:      abc     9  NA
5:      abc    10   1
6:      abc     2  -8
Другие вопросы по тегам