Динамическое агрегирование по категориям в 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
Другие вопросы по тегам