gpt4 book ai didi

r - dplyr:按学校分组的因素的计数/百分比未分组

转载 作者:行者123 更新时间:2023-12-04 11:15:28 24 4
gpt4 key购买 nike

我有一个长数据集,每个人一行与学校分组。每行都有一个有序因子 {1, 2, 3, 4},“猫”。我想获得每所学校内 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() 步骤产生的总变量将总行数放在每一行中。我什至无法进入最后的总结步骤。我很困惑。

附言在其他一些帖子中,我看到了这样的行:
n = n()

当我这样做时,我收到一条消息说,
Error in n() : This function should not be called directly

这个是从哪里来的?

TIA

最佳答案

也许这会有所帮助,尽管我不能 100% 确定您需要什么输出。

这使用 tally 计算您的 df 中存在的每个 school_number/cats 组合的行数.然后计算每个 school_number 中“猫”的百分比,然后仅按 school_number 分组。

df %>%
group_by(school_number,cats) %>%
tally %>%
group_by(school_number) %>%
mutate(pct=(100*n)/sum(n))

它给出了这个:
  #    school_number cats n       pct
# 1 10502 1 4 66.66667
# 2 10502 2 2 33.33333
# 3 10503 3 1 100.00000
# 4 10505 2 1 33.33333
# 5 10505 3 2 66.66667

编辑:

要添加示例数据中缺失的 0% 行,您可以执行以下操作。将上面的输出与包含所有 school_number/cats 组合的 0% 的 df 绑定(bind)在一起。仅保留此绑定(bind)的第一个实例(如果存在,第一个实例始终包含 >0% 的值)。然后我按school_number和cats排列以方便阅读:
y<-df %>%
group_by(school_number,cats) %>%
tally %>%
group_by(school_number) %>%
mutate(pct=(100*n)/sum(n)) %>%
select(-n)

x<-data.frame(school_number=rep(unique(df$school_number),each=4), cats=1:4,pct=0)

rbind(y,x) %>%
group_by(school_number,cats)%>%
filter(row_number() == 1) %>%
arrange(school_number,cats)

这使:
#   school_number cats       pct
#1 10502 1 66.66667
#2 10502 2 33.33333
#3 10502 3 0.00000
#4 10502 4 0.00000
#5 10503 1 0.00000
#6 10503 2 0.00000
#7 10503 3 100.00000
#8 10503 4 0.00000
#9 10505 1 0.00000
#10 10505 2 33.33333
#11 10505 3 66.66667
#12 10505 4 0.00000

关于r - dplyr:按学校分组的因素的计数/百分比未分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25881391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com