Динамическое агрегирование по категориям в R
У меня есть следующий датафрейм
a <- c(rep("CGR", 6), rep("AUS", 6), rep("ROW", 6) )
b <- c("AUT", "CH", "ROW", "ROW", "ROW", "ROW", "AUT", "CH", "ROW", "ROW", "ROW", "ROW", "AUT", "CH", "ROW", "ROW", "ROW", "ROW" )
v <- 1:18
category <- c("a", "b", "a", "a", "b", "b", "a", "b", "a", "a", "b", "b", "a", "b", "a", "a", "b", "b")
data.frame(a,b,v,category)
a b v category
1 CGR AUT 1 a
2 CGR CH 2 b
3 CGR ROW 3 a
4 CGR ROW 4 a
5 CGR ROW 5 b
6 CGR ROW 6 b
7 AUS AUT 7 a
8 AUS CH 8 b
9 AUS ROW 9 a
10 AUS ROW 10 a
11 AUS ROW 11 b
12 AUS ROW 12 b
13 ROW AUT 13 a
14 ROW CH 14 b
15 ROW ROW 15 a
16 ROW ROW 16 a
17 ROW ROW 17 b
18 ROW ROW 18 b
Что я хочу сделать, это создать новый фрейм данных или свернуть существующий, где я хочу суммировать значения в 'v', когда вектор столбца 'b' равен 'строке' по категориям вектора столбца 'категория'
Ожидаемый результат должен выглядеть так:
aa bb vv category
1 CGR AUT 1 a
2 CGR CH 2 b
3 CGR ROW 7 a
4 CGR ROW 11 b
5 AUS AUT 7 a
6 AUS CH 8 b
7 AUS ROW 19 a
8 AUS ROW 23 b
9 ROW AUT 13 a
10 ROW CH 14 b
11 ROW ROW 31 a
12 ROW ROW 35 b
Может ли кто-то просто что-то эффективно выполнить эту задачу?
1 ответ
Решение
# example dataset
a <- c(rep("CGR", 6), rep("AUS", 6), rep("ROW", 6) )
b <- c("AUT", "CH", "ROW", "ROW", "ROW", "ROW", "AUT", "CH", "ROW", "ROW", "ROW", "ROW", "AUT", "CH", "ROW", "ROW", "ROW", "ROW" )
v <- 1:18
category <- c("a", "b", "a", "a", "b", "b", "a", "b", "a", "a", "b", "b", "a", "b", "a", "a", "b", "b")
df1 = data.frame(a,b,v,category)
library(dplyr)
df1 %>%
group_by(a,b,category) %>%
summarise(vv = sum(v)) %>%
ungroup()
# # A tibble: 12 x 4
# a b category vv
# <fctr> <fctr> <fctr> <int>
# 1 AUS AUT a 7
# 2 AUS CH b 8
# 3 AUS ROW a 19
# 4 AUS ROW b 23
# 5 CGR AUT a 1
# 6 CGR CH b 2
# 7 CGR ROW a 7
# 8 CGR ROW b 11
# 9 ROW AUT a 13
# 10 ROW CH b 14
# 11 ROW ROW a 31
# 12 ROW ROW b 35