Создать статистическую переменную в длинном формате данных - PullRequest
0 голосов
/ 12 февраля 2020

Я уверен, что уже есть вопрос, похожий на этот, но я не мог заставить их работать

Я пытаюсь вычислить агрегаты (или промежуточные итоги) в кадре данных длинного формата. В столбце группы я хочу, чтобы агрегатная переменная «AGG» представляла собой сумму «value» для указанных c «Year» и «var». Я пытался использовать функцию aggregate (), но безуспешно. Я использовал код:

aggregate(value ~ cbind(Year,var), data = Energi5, FUN = sum)

Мои данные выглядят так

> head(df)
     Year group  var     value
1    1966       A x   25465462
2    1966       B x    9512621
3    1966       E x    2832865
4    1966       H x     291769
5    1966      NE x  141524912
6    1966      NF x   23580353
> tail(df)
     Year group   var  value
5403 2017     NZ y    167158
5404 2017      O y     23480
5405 2017     QF y         0
5406 2017     QS y         0
5407 2017     QZ y     16447
5408 2017 TC3000 y    488556

, и я хотел бы получить что-то подобное в конце (или в середине) моего существующего датафрейм

     Year group   var  value
5409 1966   AGG   x        ?
5410 1967   AGG   x        ?
...
5450 2017   AGG   x        ?
5451 1966   AGG   y        ?
...

Я надеюсь, вы можете помочь. Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 февраля 2020

Возможно, есть более эффективный способ сделать это, но помогает ли это?

library(dplyr)

df <- Energi5 %>%  group_by(Year, var) %>% mutate(value = sum(value)) %>% summarise_all(funs(mean))

df$group <- "AGG"

Energi5 <- merge(Energi5, df, all = T)
0 голосов
/ 12 февраля 2020

Ошибка заключается в том, как вы объявляете формулу. См. ?formula в руководстве.

# Example
year <- rep(seq(1966, 2020), each = 8)
group <- rep(letters[1:4], times = 2*(2021-1966))
var <- rep(c("x", "y"), times = length(year)/2)
value <- rnorm(length(year))

data <- cbind.data.frame(year, group, var, value)

# Solution
aggregate(value ~ year * var, data, FUN=sum)
...