группировать таблицу по нескольким факторам и распространять ее от длинного формата к широкому - data.table в R - PullRequest
0 голосов
/ 20 марта 2020

В качестве примера я буду использовать данные mtcars, доступные в R:

data(mtcars)
setDT(mtcars)

Позвольте мне на днях сгруппировать данные по трем переменным, а именно: carb, cyl, и gear. Я сделал это следующим образом. Тем не менее, я уверен, что есть лучший способ, так как он довольно повторяющийся.

newDTcars <- mtcars [, mtcars[, mtcars[, .N , by = carb], by = cyl], by= gear]

Во-вторых, я хотел бы иметь данные в широком формате, где для каждого уровня gear имеется отдельный столбец. В целях иллюстрации я сделал это, используя tidyr, однако я бы хотел, чтобы это делалось способом «data.table».

newDTcars %>% tidyr::spread(gear, N)

Основное внимание в этом вопросе уделяется решению проблемы мира data.table, поскольку я также хотел бы узнать больше о data.table.

1 Ответ

2 голосов
/ 20 марта 2020

В data.table мы можем группировать по нескольким столбцам, а для изменения формы мы можем использовать dcast.

library(data.table)
dcast(mtcars[, .N, .(carb, cyl, gear)], carb+cyl~gear, value.var = "N")

#   carb cyl  3  4  5
#1:    1   4  1  4 NA
#2:    1   6  2 NA NA
#3:    2   4 NA  4  2
#4:    2   8  4 NA NA
#5:    3   8  3 NA NA
#6:    4   6 NA  4 NA
#7:    4   8  5 NA  1
#8:    6   6 NA NA  1
#9:    8   8 NA NA  1

Вы можете использовать аргумент fill в dcast для замены NA s на 0 или любое другое число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...