变异子集平均值并添加到所有组 R
Mutate subset average and add to all groups R
我正在尝试为我的数据的特定子集创建平均值,并且我想将这些作为新变量添加到数据的不同子集。
假设我有以下数据:
df <- data.frame(year = rep(c(2010,2012,2017), 6),
party = rep(c("A", "A", "A", "B", "B", "B", "C", "C", "C"), 2),
left = rep(c(1,1,1,0,0,0,1,1,1),2),
area = c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2),
pp = c(3,4,5,1,2,6,3,4,2,5,1,1,3,4,5,2,3,0))
看起来像:
year party left area pp
2010 A 1 1 3
2012 A 1 1 4
2017 A 1 1 5
2010 B 0 1 1
2012 B 0 1 2
2017 B 0 1 6
2010 C 1 1 3
2012 C 1 1 4
2017 C 1 1 2
2010 A 1 2 5
2012 A 1 2 1
2017 A 1 2 1
2010 B 0 2 3
2012 B 0 2 4
2017 B 0 2 5
2010 C 1 2 2
2012 C 1 2 3
2017 C 1 2 0
现在我想要的是在每个“年”和“区域”内为left == 1创建一个新变量,即“pp”的平均值。但我也想将其添加到 left == 0 的子集。
我试过了:
df %>%
group_by(year, left, area) %>%
mutate(mean_left = mean(pp)) %>% ungroup()
但这给了我一个特定于 left == 0 的值和一个特定于 left == 1 的值(在每年的派对中)。
year party left area pp mean_left
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
2010 A 1 1 3 3
2012 A 1 1 4 4
2017 A 1 1 5 3.5
2010 B 0 1 1 1
2012 B 0 1 2 2
2017 B 0 1 6 6
2010 C 1 1 3 3
2012 C 1 1 4 4
2017 C 1 1 2 3.5
2010 A 1 2 5 3.5
2012 A 1 2 1 2
2017 A 1 2 1 0.5
2010 B 0 2 3 3
2012 B 0 2 4 4
2017 B 0 2 5 5
2010 C 1 2 2 3.5
2012 C 1 2 3 2
2017 C 1 2 0 0.5
我也试过:
df %>%
group_by(year, left, area) %>%
mutate(mean_left = mean(df$pp[df$left==1])) %>% ungroup()
但是这里 group_by 函数似乎失败了,我在所有列中得到 2.75(这是 mean(df$pp[df$left==1])
的值)
我怎样才能得到每年的平均分数 & 左边的面积 == 1,将这个相同的数字添加到今年 & 左边的面积 == 2?
它应该看起来像:
year party left area pp mean_left
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
2010 A 1 1 3 3
2012 A 1 1 4 4
2017 A 1 1 5 3.5
2010 B 0 1 1 3
2012 B 0 1 2 4
2017 B 0 1 6 3.5
2010 C 1 1 3 3
2012 C 1 1 4 4
2017 C 1 1 2 3.5
2010 A 1 2 5 3.5
2012 A 1 2 1 2
2017 A 1 2 1 0.5
2010 B 0 2 3 3.5
2012 B 0 2 4 2
2017 B 0 2 5 0.5
2010 C 1 2 2 3.5
2012 C 1 2 3 2
2017 C 1 2 0 0.5
提前致谢!
你走在正确的轨道上;你不能 group_by left
但 select 它在你的平均函数范围内。
df %>%
group_by(year, area) %>%
mutate(mean_left = mean(pp[left == 1])) %>%
ungroup()
输出
# A tibble: 18 x 6
year party left area pp mean_left
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 2010 A 1 1 3 3
2 2012 A 1 1 4 4
3 2017 A 1 1 5 3.5
4 2010 B 0 1 1 3
5 2012 B 0 1 2 4
6 2017 B 0 1 6 3.5
7 2010 C 1 1 3 3
8 2012 C 1 1 4 4
9 2017 C 1 1 2 3.5
10 2010 A 1 2 5 3.5
11 2012 A 1 2 1 2
12 2017 A 1 2 1 0.5
13 2010 B 0 2 3 3.5
14 2012 B 0 2 4 2
15 2017 B 0 2 5 0.5
16 2010 C 1 2 2 3.5
17 2012 C 1 2 3 2
18 2017 C 1 2 0 0.5
我正在尝试为我的数据的特定子集创建平均值,并且我想将这些作为新变量添加到数据的不同子集。
假设我有以下数据:
df <- data.frame(year = rep(c(2010,2012,2017), 6),
party = rep(c("A", "A", "A", "B", "B", "B", "C", "C", "C"), 2),
left = rep(c(1,1,1,0,0,0,1,1,1),2),
area = c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2),
pp = c(3,4,5,1,2,6,3,4,2,5,1,1,3,4,5,2,3,0))
看起来像:
year party left area pp
2010 A 1 1 3
2012 A 1 1 4
2017 A 1 1 5
2010 B 0 1 1
2012 B 0 1 2
2017 B 0 1 6
2010 C 1 1 3
2012 C 1 1 4
2017 C 1 1 2
2010 A 1 2 5
2012 A 1 2 1
2017 A 1 2 1
2010 B 0 2 3
2012 B 0 2 4
2017 B 0 2 5
2010 C 1 2 2
2012 C 1 2 3
2017 C 1 2 0
现在我想要的是在每个“年”和“区域”内为left == 1创建一个新变量,即“pp”的平均值。但我也想将其添加到 left == 0 的子集。
我试过了:
df %>%
group_by(year, left, area) %>%
mutate(mean_left = mean(pp)) %>% ungroup()
但这给了我一个特定于 left == 0 的值和一个特定于 left == 1 的值(在每年的派对中)。
year party left area pp mean_left
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
2010 A 1 1 3 3
2012 A 1 1 4 4
2017 A 1 1 5 3.5
2010 B 0 1 1 1
2012 B 0 1 2 2
2017 B 0 1 6 6
2010 C 1 1 3 3
2012 C 1 1 4 4
2017 C 1 1 2 3.5
2010 A 1 2 5 3.5
2012 A 1 2 1 2
2017 A 1 2 1 0.5
2010 B 0 2 3 3
2012 B 0 2 4 4
2017 B 0 2 5 5
2010 C 1 2 2 3.5
2012 C 1 2 3 2
2017 C 1 2 0 0.5
我也试过:
df %>%
group_by(year, left, area) %>%
mutate(mean_left = mean(df$pp[df$left==1])) %>% ungroup()
但是这里 group_by 函数似乎失败了,我在所有列中得到 2.75(这是 mean(df$pp[df$left==1])
的值)
我怎样才能得到每年的平均分数 & 左边的面积 == 1,将这个相同的数字添加到今年 & 左边的面积 == 2?
它应该看起来像:
year party left area pp mean_left
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
2010 A 1 1 3 3
2012 A 1 1 4 4
2017 A 1 1 5 3.5
2010 B 0 1 1 3
2012 B 0 1 2 4
2017 B 0 1 6 3.5
2010 C 1 1 3 3
2012 C 1 1 4 4
2017 C 1 1 2 3.5
2010 A 1 2 5 3.5
2012 A 1 2 1 2
2017 A 1 2 1 0.5
2010 B 0 2 3 3.5
2012 B 0 2 4 2
2017 B 0 2 5 0.5
2010 C 1 2 2 3.5
2012 C 1 2 3 2
2017 C 1 2 0 0.5
提前致谢!
你走在正确的轨道上;你不能 group_by left
但 select 它在你的平均函数范围内。
df %>%
group_by(year, area) %>%
mutate(mean_left = mean(pp[left == 1])) %>%
ungroup()
输出
# A tibble: 18 x 6
year party left area pp mean_left
<dbl> <chr> <dbl> <dbl> <dbl> <dbl>
1 2010 A 1 1 3 3
2 2012 A 1 1 4 4
3 2017 A 1 1 5 3.5
4 2010 B 0 1 1 3
5 2012 B 0 1 2 4
6 2017 B 0 1 6 3.5
7 2010 C 1 1 3 3
8 2012 C 1 1 4 4
9 2017 C 1 1 2 3.5
10 2010 A 1 2 5 3.5
11 2012 A 1 2 1 2
12 2017 A 1 2 1 0.5
13 2010 B 0 2 3 3.5
14 2012 B 0 2 4 2
15 2017 B 0 2 5 0.5
16 2010 C 1 2 2 3.5
17 2012 C 1 2 3 2
18 2017 C 1 2 0 0.5