У меня есть таблица данных с ключом и около 1000 строк, два из которых установлены на ключ. Я хотел бы создать новую переменную с именем разницей, которая содержит разницу между числовыми строками, сгруппированными по ключу.Как рассчитать разницу в списке различных ключей?
Например, простые данные: ID и Закон устанавливаются в качестве ключевого
ID ValueDate Act Volume
1 2015-01-01 EUR 21
1 2015-02-01 EUR 22
1 2015-01-01 MAD 12
1 2015-02-01 MAD 11
2 2015-01-01 EUR 5
2 2015-02-01 EUR 7
3 2015-01-01 EUR 4
3 2015-02-01 EUR 2
3 2015-03-01 EUR 6
То, что я хотел бы иметь это: добавление нового столбца, чтобы вычислить разницу между двумя рядами (порядка по времени) для каждой группы, обратите внимание, что для первой строки каждой группы, значение разности является 0.
ID ValueDate Act Volume Difference
1 2015-01-01 EUR 21 0
1 2015-02-01 EUR 22 1
1 2015-01-01 MAD 12 0
1 2015-02-01 MAD 11 -1
2 2015-01-01 EUR 5 0
2 2015-02-01 EUR 7 2
3 2015-01-01 EUR 4 0
3 2015-02-01 EUR 2 -2
3 2015-03-01 EUR 6 4
Вот код для генерации тестовых данных:
dd <- data.table(ID = c(1,1,1,1,2,2,3,3,3),
ValueDate = c("2015-01-01", "2015-02-01", "2015-01-01","2015-02-01", "2015-01-01","2015-02-01","2015-01-01","2015-02-01","2015-03-01"),
Act = c("EUR","EUR","MAD","MAD","EUR","EUR","EUR","EUR","EUR"),
Volume=c(21,22,12,11,5,7,4,2,6))
набор ключ для таблицы:
setkey(dd, ID, Act)
для просмотра данных:
> dd
ID ValueDate Act Volume
1 1 2015-01-01 EUR 21
2 1 2015-02-01 EUR 22
3 1 2015-01-01 MAD 12
4 1 2015-02-01 MAD 11
5 2 2015-01-01 EUR 5
6 2 2015-02-01 EUR 7
7 3 2015-01-01 EUR 4
8 3 2015-02-01 EUR 2
9 3 2015-03-01 EUR 6
так, мы можем использовать функцию агрегата для вычисления разницы? или метод .SD для «подмножества данных», но я не знаю, как сделать вычисление разницы между двумя строками по группе, обратите внимание, что для некоторых групп число строк может быть другим, но у меня есть попробовал до использования для (i в 0: x), чтобы пересчитать разницу, но я не думаю, что это может быть хороший метод :(
Всегда ли будет ровно две записи? Что вы хотите, если их нет? – Elin
на самом деле не всегда будут две записи, это просто простой случай, некоторые из групп имеют больше записей – ZAWD