Агрегирование переменных при работе с символами r - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть датафрейм, похожий на этот:

   Model            Month    Country Price
1  Audi TT          2016-03  NL      187
1  Audi TT          2017-03  NL      220
1  Audi TT          2016-03  DE      190
4  Volkswagen Golf  2016-08  NL      204

Теперь я хочу объединить данные по странам, чтобы у меня было только одно наблюдение для каждой модели на конкретную дату. Для этого я использую:

DT = data.table(test_data)
test_data_total = DT[, lapply(.SD, mean), by = Month]

из Может ли dplyr суммировать несколько переменных без перечисления каждой из них? .

Однако это работает только при работе с числовыми переменными. В моем случае переменная Model является символом, так что это дает мне ошибку, тогда как я хочу напечатать только название модели один раз. Так что потом должно выглядеть так:

Model            Month    Country Price
1  Audi TT          2016-03  NL      avg
1  Audi TT          2017-03  NL      220
4  Volkswagen Golf  2016-08  NL      204

Кто-нибудь знает, как это сделать?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Продолжая с data.table, попробуйте:

library(data.table)
setDT(test_data)[, .(Country = list(Country), Price = mean(Price)),
                 by = list(Model, Month)][]
# output
             Model   Month Country Price
1:         Audi TT 2016-03   NL,DE 188.5
2:         Audi TT 2017-03      NL 220.0
3: Volkswagen Golf 2016-08      NL 204.0

Данные

test_data <- structure(list(Model = c("Audi TT", "Audi TT", "Audi TT", "Volkswagen Golf"
), Month = c("2016-03", "2017-03", "2016-03", "2016-08"), Country = c("NL", 
"NL", "DE", "NL"), Price = c(187L, 220L, 190L, 204L)), .Names = c("Model", 
"Month", "Country", "Price"), class = "data.frame", row.names = c(NA, 
-4L))
0 голосов
/ 14 ноября 2018

Попробуйте:

test_data_total <- DT %>% 
  group_by(Model, Month) %>%
  summarise(Country = toString(unique(Country)),
            Price_avg = mean(Price))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...