У меня есть data.table
, содержащий категориальную переменную, и я ищу эффективный способ подсчета ее категорий в агрегированной таблице, тогда как каждая категория разбита на столбцы.
Вот мои данные:
library(data.table)
DT <- data.table(x = c(1, 1, 2, 1, 1, 1, 3, 3, 3, 2, 2),
y = c("A", "A", "B", "A", "A", "B", "B", "B", "A", "C"))
> DT
x y
1: 1 A
2: 1 A
3: 2 B
4: 1 A
5: 1 A
6: 1 B
7: 3 B
8: 3 B
9: 3 A
10: 2 A
11: 2 C
Теперь я хочу агрегировать DT
по x
и получить data.table
со столбцами, названными после каждой категории, найденной в y
, с отображением соответствующей частоты:
x A B C
1: 1 4 1 NA
2: 2 1 1 1
3: 3 1 2 NA
До сих пор мне удавалось решить эту проблему только «вручную», создавая агрегаты для каждой категории, например, DT[y == "A", .N, by = x]
, и объединяя их вместе с помощью левого соединения. Я безуспешно обработал весь inte rnet для гораздо более динамичного c решения, такого как функция, которая просто обеспечивает желаемый результат, например:
DT1 <- aggfunc(DT, var = "y", by = "x")