用于计算子组比例的最佳工具/包是什么?我想我可以尝试这样的事情:
data(mtcars)
library(plyr)
ddply(mtcars, .(cyl), transform, Pct = gear/length(gear))
但输出不是我想要的,因为我想要一些行数等于cyl
的东西。即使将其更改为summarise
,我仍会遇到同样的问题。
我对其他软件包持开放态度,但我认为plyr
是最好的,因为我最终希望围绕这个构建一个函数。有什么想法吗?
我很感激任何帮助解决这样的基本问题。
答案 0 :(得分:2)
library(dplyr)
mtcars %>%
count(cyl, gear) %>%
mutate(prop = prop.table(n))
请参阅?count
,基本上,count
是summarise
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
注意每个阶段的分组,或者你的号码将被关闭。