Попробуйте aggregate
, определив сначала группу категорий.
target <- c("a", "b", "c")
group <- factor(dat$Category %in% target,
levels = c(TRUE, FALSE),
labels = c("e", "d"))
agg <- aggregate(Value ~ group + Year, dat, sum)[c(2, 1, 3)]
agg
# Year group Value
#1 2015 e 7
#2 2015 d 1
#3 2016 e 10
#4 2016 d 1
Правка.
Если у вас много категорий и вы хотите свернуть некоторые из нихоставляя остальных без изменений, пакет CRAN forcats function fct_collapse
является хорошим способом сделать это.
group <- forcats::fct_collapse(dat$Category,
"e" = target)
group
#[1] e e e d e e e d
#Levels: e d
Затем aggregate
, как указано выше.
Данные.
dat <-
structure(list(Year = c(2015L, 2015L, 2015L, 2015L, 2016L, 2016L,
2016L, 2016L), Category = structure(c(1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L), .Label = c("a", "b", "c", "d"), class = "factor"), Value = c(2L,
3L, 2L, 1L, 7L, 2L, 1L, 1L)), class = "data.frame", row.names = c(NA,
-8L))