关于为多个类别创建摘要列,我关注very useful solution。正如链接解决方案中所讨论的,我正在使用代码为每个子组生成百分比列。
mtcars %>%
group_by (am, gear) %>%
summarise (n=n()) %>%
mutate(rel.freq = paste0(round(100 * n/sum(n), 0), "%"))
代码生成所需的值:
## Source: local data frame [4 x 4]
## Groups: am
##
## am gear n rel.freq
## 1 0 3 15 79%
## 2 0 4 4 21%
## 3 1 4 8 62%
## 4 1 5 5 38%
我想修改此代码,以动态创建与dplyr
调用中传递的第二个类别中可用的唯一类别相关的列。如果gear
,则为 am gear n rel.freq_gear3 rel.freq_gear4 rel.freq_gear5
1 0 3 15 79% 21%
2 1 4 8 0 62% 38%
所附例子。因此,在附加示例的情况下,结果数据框将如下所示:
conditionally
对于少数类别,我认为我可以使用汇总dplyr
中的值,正如所讨论的那样here,我会尝试执行sumBfoo = sum(B[A=="foo"]))
语句仅适用于指定条件dplyr
。但是,在处理多个类别时,这种方法效率低下。可以使用循环开发外部dplyr
解决方案并跳过所需类别的唯一值,但我希望在 library(gmodels)
CrossTable(mtcars$am, mtcars$gear)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
| N / Table Total |
|-------------------------|
Total Observations in Table: 32
| mtcars$gear
mtcars$am | 3 | 4 | 5 | Row Total |
-------------|-----------|-----------|-----------|-----------|
0 | 15 | 4 | 0 | 19 |
| 4.169 | 1.371 | 2.969 | |
| 0.789 | 0.211 | 0.000 | 0.594 |
| 1.000 | 0.333 | 0.000 | |
| 0.469 | 0.125 | 0.000 | |
-------------|-----------|-----------|-----------|-----------|
1 | 0 | 8 | 5 | 13 |
| 6.094 | 2.003 | 4.339 | |
| 0.000 | 0.615 | 0.385 | 0.406 |
| 0.000 | 0.667 | 1.000 | |
| 0.000 | 0.250 | 0.156 | |
-------------|-----------|-----------|-----------|-----------|
Column Total | 15 | 12 | 5 | 32 |
| 0.469 | 0.375 | 0.156 | |
-------------|-----------|-----------|-----------|-----------|
中执行此操作。
一般来说,我想创建一个类似下面的表:
$eventManager->attach(
MvcEvent::EVENT_ROUTE,
array($this, 'setBaseUrl'),
-100
);
// Trigger before 404s are rendered.
$eventManager->attach(
MvcEvent::EVENT_RENDER,
array($this, 'setBaseUrl'),
-1000
);
但我只对行比例感兴趣而没有计数和总计以及其他小工具。
答案 0 :(得分:1)
dplyr
@docendo discimus
建立评论:
library(tidyr)
count(mtcars, am, gear) %>%
mutate(rel.freq = n/sum(n)) %>%
spread(gear, rel.freq) %>%
group_by(am) %>%
summarize_each(funs(sum2 = sum(., na.rm = TRUE))) %>%
mutate_each(funs(perc = paste0(round(100 * ., 0), "%")), -am, -n)
产地:
Source: local data frame [2 x 5]
am n 3 4 5
(dbl) (int) (chr) (chr) (chr)
1 0 19 79% 21% 0%
2 1 13 0% 62% 38%
base
prop.table(table(mtcars$am, mtcars$gear), 1) %>%
round(2) %>%
'*'(100)
产地:
3 4 5
0 79 21 0
1 0 62 38