Я сталкивался с (я думаю), это сложная проблема с скоплениями на data.table
Я следующий data.table
R data.table условное объединение
structure(list(id1 = c("a", "a", "a", "b", "b", "c", "c"), id2 = c("x",
"y", "z", "x", "u", "y", "z"), val = c(2, 1, 2, 1, 3, 4, 3)), .Names = c("id1",
"id2", "val"), row.names = c(NA, -7L), class = c("data.table",
"data.frame"), .internal.selfref = <pointer: 0x1f66a78>)
Я хотел бы создать условные агрегаты на val
column для этих данных на основе второй колонки id2
. Способ агрегации состоит только в том, чтобы включать только группы id1
, которые имеют по меньшей мере один элемент из заданного элемента id2
. Я приведу пример, чтобы показать, что я имею в виду.
Условный агрегат для x
(первая строка второго столбца) будет включать в себя val
значения 2,1,2 для id1 = a
и val
значения = 1,3 от id1 = b
, потому что id2=x
существует для них, но никаких значений из id1=c
, в результате чего значение 2 + 1 + 2 + 1 + 3 = 9. Я хочу, чтобы 9 был 4-м столбцом в каждой строке, где появляется id2 = x
.
Аналогичным образом, я хочу сделать это для всех значений id2
. Таким образом, конечный результат будет
id1 id2 val c.sum
1: a x 2 9
2: a y 1 12
3: a z 2 12
4: b x 1 9
5: b u 3 4
6: c y 4 12
7: c z 3 14
Возможно ли это в R, data.table? Или любой другой пакет/метод? Заранее спасибо
Я путать с ожидаемым результатом. Если id2 содержит z, вы ожидаете 12 в c.cum. Я что-то упускаю? – jazzurro
Опечатка, я имел в виду 12. – broccoli
Это все хорошо. Теперь у вас есть ответы. :) – jazzurro