将group_by和count()应用到变量后计算总计的百分比

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将group_by和count()应用到变量后计算总计的百分比相关的知识,希望对你有一定的参考价值。

我正在尝试计算分组变量的总计百分比。我有一个带有吸烟变量的数据框

> df$smoking
  [1] NA         "Previous" "Never"    "Current"  "Never"   
  [6] "Never"    "Never"    "Never"    "Current"  "Current" 
 [11] "Previous" "Never"    "Never"    "Previous" "Never"   
 [16] "Previous" "Previous" "Never"    "Never"    "Never"   
 [21] "Never"    "Never"    "Never"    "Never"    "Previous"

我想按类别分组,对类别进行计数,然后计算总计的百分比。我可以得到很好的计数,并以此方式排除NA:


> df %>% 
+   group_by(smoking) %>%
+   filter(!is.na(smoking)) %>%
+   count() 
# A tibble: 3 x 2
# Groups:   smoking [3]
  smoking      n
  <chr>    <int>
1 Current     93
2 Never      380
3 Previous   213
> 

但是我无法获得每个百分比。我看过其他多种解决方案,但是它们似乎没有用。例如,我见过的最常见的结果是:


> df %>% 
+   group_by(smoking) %>%
+   filter(!is.na(smoking)) %>%
+   count() %>% 
+   mutate(percent = 100 * n / sum(n))

# A tibble: 3 x 3
# Groups:   smoking [3]
  smoking      n percent
  <chr>    <int>   <dbl>
1 Current     93     100
2 Never      380     100
3 Previous   213     100
> 

似乎“ sum(n)”没有交叉组。如何通过组而不是组内计算总和?谢谢你的帮助!!

我正在尝试计算分组变量的总计百分比。我有一个包含吸烟变量的数据框> df $吸烟[1]不适用“上一个”,“从不”,“当前”,“从不” [6]“从不” ...

答案
> df[!is.na(smoking),] %>% count (smoking) %>% mutate (percent=n/sum(n)*100)

以上是关于将group_by和count()应用到变量后计算总计的百分比的主要内容,如果未能解决你的问题,请参考以下文章

R - 基于日期列使用 group_by 的平均计算?

R语言dplyr包使用group_by函数和summarise函数计算单分类变量分组均值ggplot2可视化线图(line plot)并设置线条类型为虚线(set line types)

R语言dplyr包使用group_by函数和summarise函数计算单分类变量分组均值ggplot2可视化线图(line plot)并设置线条类型为虚线(set line types)

应用 group_by 时保留 df 的所有变量并用日期汇总? [复制]

使用标准评估更改 dplyr::count 中的变量名称

计算小标题中每个位置的平均每日步数[重复]