R中按类别动态聚合
dynamic aggregation by category in 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
我想做的是创建一个新的数据框或折叠现有的数据框,当列向量 'b' 等于“行”时,我想在其中对 'v' 中的值求和列向量的类别 'category'
预期结果应如下所示:
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
有人可以提供一些有效的方法来执行此任务吗?
# 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
我有以下数据框
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
我想做的是创建一个新的数据框或折叠现有的数据框,当列向量 'b' 等于“行”时,我想在其中对 'v' 中的值求和列向量的类别 'category'
预期结果应如下所示:
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
有人可以提供一些有效的方法来执行此任务吗?
# 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