【发布时间】:2022-01-11 15:31:07
【问题描述】:
我正在尝试为我的数据的某个子集创建平均值,并且我想将这些作为新变量添加到数据的不同子集中。
假设我有以下数据:
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
提前致谢!
【问题讨论】: