计算具有特定行条件的列的百分比

Calculate percentage for a column with certain condition of rows

我有以下数据框:

 sleep health count prop
1     7   Good   100   NA
2     7 Normal    75   NA
3     7    Bad    25   NA
4     8   Good   125   NA
5     8 Normal    75   NA
6     8    Bad    25   NA

我想用基于 sleep 组的 count 的每个百分比填充 prop 列。例如,前 3 行 prop 应为 0.5、0.375 和 0.125,然后最后 3 行 prop 分别为 0.555、0.333 和 0.111。

这可以手动完成,方法是先用 sleep 分隔数据框,然后对每个数据框使用 prop.table(prop),但是由于有很多 sleep 组,我找不到简洁的方法来做到这一点。有什么想法吗?

R 中,我们可以通过 'sleep'

分组后除以 'count' 的 sum 来完成此操作
library(dplyr)
df1 %>% 
    group_by(sleep) %>%
    mutate(prop = round(count/sum(count), 3))
#    sleep health count  prop
#    <int>  <chr> <int> <dbl>
#1     7   Good   100 0.500
#2     7 Normal    75 0.375
#3     7    Bad    25 0.125
#4     8   Good   125 0.556
#5     8 Normal    75 0.333
#6     8    Bad    25 0.111

或使用base R

df1$prop <- with(df1, ave(count, sleep, FUN=prop.table))