我正在编写一个函数来使用
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 中使用
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