R中的ddply:对于每个组,查找特定变量的出现百分比

我有一个数据集,其中包含两列,user_type和滞后响应时间(以天为单位):

user_type imp_date lag 
           Consumer 20130613   1  
           Consumer 20130612   2  
           Consumer 20130611   3  
           Consumer 20130612   3  
           Producer 20130610  10  
           Producer 20130614   5  
           Producer 20130613   7

我想计算每个user_type的滞后百分比 . 这是我想要的输出示例:

user_type        lag    percentage
---------        ---    ----------
Consumer         1      0.25
Consumer         2      0.25
Consumer         3      0.5
Producer         5      0.333
Producer         7      0.333
Producer         10     0.333

延迟时间响应的百分比细分是相对于每个user_type组的总和计算的 .

具体来说,我想在pylr中使用ddply,我有类似的东西:

a = ddply(data, .(user_type), summarize, table(lag)/length(lag))

但它没有给我延迟时间响应列 .

附:我最初的动机是为不同的用户类型绘制这些滞后分布,我有:

p <- ggplot(data, aes(x = lag, fill = factor(user_type))) 
p + geom_bar(aes(y = (..count..)/sum(..count..)))

但似乎每个user_type的滞后百分比细分是不正确的(即,百分比是针对每个滞后组而不是user_type组计算的) . 结果,我决定在绘图之前转换我的数据集,如果有更简单的方法,请分享 .

谢谢!

回答(1)

2 years ago

这可以使用ddply来完成:

a = ddply(data, .(user_type), function(d) {
    data.frame(table(d$lag)/length(d$lag))
})

虽然我可能会使用 data.table 包,如下所示:

library(data.table)
d = data.table(data)
a = d[, list(lag=unique(lag), percentage=as.numeric(table(lag)/length(lag))), by="user_type"]