【发布时间】:2016-03-08 06:40:45
【问题描述】:
使用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' must be an array of at least two dimensions
因此我的问题是:如何在dplyr 中添加具有行百分比值的额外列?
支点
- 我更喜欢空白值而不是
NAs - 使用
gmodels中的CrossTable可以轻松构建表格,但我想留在dplyr,因为我想在一个地方保留尽可能多的转换
【问题讨论】:
-
当您说“空白值”时,您的意思是零吗?因为然后将 fill=0 添加到 spread() 可以解决此问题。 fill=" " 产生空白,但列是字符。
-
@atiretoo 感谢您的关注。我应该更准确,
0可以。同样出于导出目的,空字符串也可以。但我对此并不太挑剔,这只是一个侧面。
标签: r aggregate dplyr frequency crosstab