按组比例汇总

时间:2016-05-05 18:31:47

标签: r dplyr plyr

用于计算子组比例的最佳工具/包是什么?我想我可以尝试这样的事情:

data(mtcars)
library(plyr)
ddply(mtcars, .(cyl), transform, Pct = gear/length(gear))

但输出不是我想要的,因为我想要一些行数等于cyl的东西。即使将其更改为summarise,我仍会遇到同样的问题。

我对其他软件包持开放态度,但我认为plyr是最好的,因为我最终希望围绕这个构建一个函数。有什么想法吗?

我很感激任何帮助解决这样的基本问题。

2 个答案:

答案 0 :(得分:2)

library(dplyr)

mtcars %>%
  count(cyl, gear) %>%
  mutate(prop = prop.table(n))

请参阅?count,基本上,countsummarise n()的包装器,但它会为您执行分组。查看mtcars %>% count(cyl, gear)的输出。然后,我们添加了一个名为mutate prop的附加变量,该变量是我们在prop.table()之后创建的n变量上调用count(cyl, gear)的结果

您可以使用SE的{​​{1}}版本count()将其创建为函数。查看count_()包中的vignette for Non-Standard Evaluation

这是一个很好的github gist解决了许多使用dplyr和其他包的交叉制表变体。

答案 1 :(得分:1)

获取组内的频率:

struct tm timeDate
memset(&timeDate, 0, sizeof(timeDate));

或等效,

library(dplyr)
mtcars %>% count(cyl, gear) %>% mutate(Freq = n/sum(n))
# Source: local data frame [8 x 4]
# Groups: cyl [3]
# 
#     cyl  gear     n       Freq
#   (dbl) (dbl) (int)      (dbl)
# 1     4     3     1 0.09090909
# 2     4     4     8 0.72727273
# 3     4     5     2 0.18181818
# 4     6     3     2 0.28571429
# 5     6     4     4 0.57142857
# 6     6     5     1 0.14285714
# 7     8     3    12 0.85714286
# 8     8     5     2 0.14285714

注意每个阶段的分组,或者你的号码将被关闭。