想象一个函数,如果在各个列中满足特定条件,则求和然后除法。现在试试,效果很好。
sum(df[which(df$x %in% c("1", "2", "3") | df$y %in% c("1", "2", "3")), z])/sum(df$z)
现在想象一下,按照另一列进行分组,并尝试让该函数在这些组中工作。就我而言,当我尝试这个时,它不起作用!
df %> group_by(a) %>% sum(df[which(df$x %in% c("1", "2", "3") | df$y %in% c("1", "2", "3")), 4])/sum(df$z)
我得到的答案是整个df的计算,列出了所有a的
我需要的是a每个小组的答案。
我不知道该怎么问,但有没有办法让第一个函数为a列中每个分组元素的所有实例运行?
谢谢
按"a"分组后,df$
将获得整列的值。相反,它将在每个组中,即删除df$
,并使用summarise
进行计算
library(dplyr)
df %>%
group_by(a) %>%
summarise(Prop = sum(z[x %in% 1:3|y %in% 1:3])/sum(z))
如果有许多列,则使用if_any
df %>%
group_by(a) %>%
summarise(Prop = sum(z[if_any(c(x, y), ~.x %in% 1:3)])/sum(z))