使用dplyr
,我正在为两个类别生成一个简单的汇总表:
# Data
data("mtcars")
# Lib
require(dplyr)
# Summary
mt_sum <- mtcars %>%
group_by(am, gear) %>%
summarise(n = n()) %>%
spread(key = am, value = n)
哪种能够产生所期望的结果:
Source: local data frame [3 x 3]
gear 0 1
(dbl) (int) (int)
1 3 15 NA
2 4 4 8
3 5 NA 5
我希望在生成的表格中添加一组列,这些列将显示行百分比,而不是目前可用的总数。
期望结果
我希望我的表格看起来像这样:
gear 0 1 0per 1per
1 3 15 NA 100%
2 4 4 8 33% 67%
3 5 NA 5 100%
尝试
我尝试通过添加代码来实现以下目标:
mt_sum <- mtcars %>%
group_by(am, gear) %>%
summarise(n = n()) %>%
spread(key = am, value = n) %>%
mutate_each(funs(./rowSums(.)))
但是会返回以下错误:
Error: 'x'必须是至少两个维度的数组
因此我的问题是: 如何在dplyr
中添加带有行百分比值的额外列?
附加说明
- 我更喜欢空值而不是
NAs
- 可以使用
gmodels
中的CrossTable
轻松构建表格,但我想留在dplyr
中,因为我希望尽可能多地在一个地方保留转换
0
就可以了。此外,出口目的地为空字符串也可以。但是我对此并不太挑剔,这只是一个次要的问题。 - Konrad