获取数据集中多个变量的频率百分比

问题描述 投票:0回答:1

我正在编写一个函数来使用

prop.table
生成频率表,并希望为数据集中的几个分类变量生成该频率表。

在此示例中我使用

datasets::mtcars
。我希望在数据集中的二进制变量“
am
”上编写带有 group_by 的函数,因此输出按
am == 1
am == 0
分层。

对于这段代码,有没有办法添加

group_by
语句?

summary(mtcars)

apply(mtcars[c("cyl", "gear", "carb")], 2, 
                    \(x) prop.table(table(x, useNA = "always"))*100)
r grouping lapply proportions
1个回答
2
投票

您可以在基础 R 中使用

by()

by(mtcars, mtcars$am, function(mt_am) 
  sapply(mt_am[c("cyl", "gear", "carb")], 
        function(mt_col) prop.table(table(mt_col, useNA = "always"))*100))
#> mtcars$am: 0
#> $cyl
#> mt_col
#>        4        6        8     <NA> 
#> 15.78947 21.05263 63.15789  0.00000 
#> 
#> $gear
#> mt_col
#>        3        4     <NA> 
#> 78.94737 21.05263  0.00000 
#> 
#> $carb
#> mt_col
#>        1        2        3        4     <NA> 
#> 15.78947 31.57895 15.78947 36.84211  0.00000 
#> 
#> ------------------------------------------------------------ 
#> mtcars$am: 1
#> $cyl
#> mt_col
#>        4        6        8     <NA> 
#> 61.53846 23.07692 15.38462  0.00000 
#> 
#> $gear
#> mt_col
#>        4        5     <NA> 
#> 61.53846 38.46154  0.00000 
#> 
#> $carb
#> mt_col
#>         1         2         4         6         8      <NA> 
#> 30.769231 30.769231 23.076923  7.692308  7.692308  0.000000
© www.soinside.com 2019 - 2024. All rights reserved.