У меня есть data.table, который выглядит следующим образом:
dt
id month balance
1: 1 4 100
2: 1 5 50
3: 2 4 200
4: 2 5 135
5: 3 4 100
6: 3 5 100
7: 4 5 300
«id» - это идентификатор клиента, «month» указывает, какой это месяц, а «balance» указывает остаток на счетеклиент.В некотором смысле это продольные данные, где, скажем, элемент (2,3) указывает, что у Клиента # 1 на конец месяца 5 остаток на счете 50.
Я хочу создать столбец, который будетдайте мне разницу между балансом клиента между 5 и 4 месяцами, чтобы узнать о транзакциях, совершаемых с одного месяца в другой.
Эта новая переменная должна сообщить мне, что Клиент 1 привлек 50, Клиент 2 привлек 65 и Клиент3 не делали ничего в совокупном выражении с апреля по май.Клиент 4 - это новый клиент, который присоединился к маю.
Я подумал о следующем коде:
dt$transactions <- dt$balance - shift(dt$balance, 1, "up")
Однако он не работает должным образом, поскольку сообщает, что Клиент 4 заработал 200долларовый депозит (но Клиент 4 новый!).Поэтому я хочу как-то ввести аргумент «by = id».
Я знаю, что решение заключается в использовании следующих обозначений:
dt[, transactions := balance - shift(balance, ??? ), by=id]
Мне просто нужновыяснить, как заставить вышеупомянутый код работать должным образом.
Заранее спасибо.