我有一个长数据集,每个个体都与学校分组。每行都有一个有序因子{1,2,3,4},“cats”。我想在每个学校内获取1、2、3和4的百分比。数据集如下:
school_number cats
1 10505 3
2 10505 3
3 10502 1
4 10502 1
5 10502 2
6 10502 1
7 10502 1
8 10502 2
10 10503 3
11 10505 2
我尝试了类似于这样的东西:
df_pcts <- df %>%
group_by(school_number) %>%
mutate(total=sum(table(cats))) %>%
summarize(cat_pct = table(cats)/total)
但是通过mutate()步骤生成的total variable会在每行中显示总行数。我甚至不能进行最终的summarize步骤。我很困惑。
P.S. 在其他帖子中,我看到了像这样的行:
n = n()
当我这样做时,会收到一条消息,内容如下:
Error in n() : This function should not be called directly
这是从哪里来的?
谢谢你!
df %>% group_by(school_number, cats) %>% summarise(n=n()) %>% mutate(pct=100*n/sum(n))
。 - akrunmutate
,并确认输出的最后一行是否为<environment: namespace:dplyr>
?如果输出是<environment: namespace:plyr>
,那么这正是问题所在:在加载 dplyr 之后,某种方式加载了 plyr(而 plyr 的 mutate 不会注意 group_by)。这是“group_by 不起作用”的常见原因(尽管不是唯一的原因)。 - David Robinsonsummarize
函数内部使用n()
吗?那就是它应该被使用的地方。如果你仍然遇到错误,也许你可以展示一个完整的可复现的例子(可能需要新开一个问题,因为这与当前问题无关)。 - David Robinson