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