dcast с несколькими переменными в опции val.var - PullRequest
2 голосов
/ 10 апреля 2020

Я использую функцию dcast:

summary <- dcast(DB1, 
                 REGION_ID + REGION_NAME ~ STATUS,
                 fun.aggregate = sum, 
                 value.var = "SALES")

Я пытаюсь использовать две переменные в value.var, но получаю ошибку. Ниже приведен синтаксис:

summary <- dcast(DB1, 
                 REGION_ID + REGION_NAME ~ STATUS,
                 fun.aggregate = sum, 
                 value.var = c("SALES","PROFIT"))

1 Ответ

0 голосов
/ 10 апреля 2020

Ошибка возникает, когда мы используем reshape2::dcast вместо data.table::dcast, поскольку reshape2::dcast не поддерживает более одного value.var.

Документация для ?reshape2::dcast дает

value.var - имя столбца, в котором хранятся значения, см. Стратегию по умолчанию для определения этого.

в то время как в ?data.table::dcast это

value.var - Имя столбца, значения которого будут заполнены для приведения. Функция guess () пытается, ну, угадать этот столбец автоматически, если ничего не указано. Приведите несколько столбцов value.var одновременно, передав их имена как символьный вектор. См. Примеры.


С небольшим воспроизводимым примером

data(mtcars)
dcast(mtcars, vs + am ~ carb, fun.aggregate = sum, value.var = c('mpg', 'disp'))

Ошибка в .subset2 (x, i, точный = точный): индекс за пределами границ Кроме того: Предупреждающие сообщения: 1: В dcast (mtcars, vs + am ~ carb, fun.aggregate = sum, value.var = c ("mpg",

Если мы преобразуем в data.table

library(data.table)
dcast(as.data.table(mtcars), vs + am ~ carb, fun.aggregate = sum, value.var = c('mpg', 'disp'))
#   vs am mpg_1 mpg_2 mpg_3 mpg_4 mpg_6 mpg_8 disp_1 disp_2 disp_3 disp_4 disp_6 disp_8
#1:  0  0   0.0  68.6  48.9  63.1   0.0     0    0.0 1382.0  827.4 2082.0      0      0
#2:  0  1   0.0  26.0   0.0  57.8  19.7    15    0.0  120.3    0.0  671.0    145    301
#3:  1  0  61.0  47.2   0.0  37.0   0.0     0  603.1  287.5    0.0  335.2      0      0
#4:  1  1 116.4  82.2   0.0   0.0   0.0     0  336.8  291.8    0.0    0.0      0      0

В коде ОП это будет

summary_out <- dcast(setDT(DB1), 
                 REGION_ID + REGION_NAME ~ STATUS,
                 fun.aggregate = sum, 
                 value.var = c("SALES","PROFIT"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...