我有一个数据集,其中包含两列,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
我想计算EACH 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.S。我最初的动机是为不同的用户类型绘制这些滞后分布,我有:
p <- ggplot(data, aes(x = lag, fill = factor(user_type)))
p + geom_bar(aes(y = (..count..)/sum(..count..)))
但似乎每个user_type的滞后百分比细分是不正确的(即,百分比是针对每个滞后组而不是user_type组计算的)。因此,我决定在绘图之前转换我的数据集,如果有更简单的方法,请分享。
谢谢!
答案 0 :(得分:3)
这可以使用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"]