我看了here和here的答案,但我还没有得到我需要总结我的数据帧。我认为this answer最接近我的需要。
我想查看客户在特定月份订购的次数,然后查看当月内发生了多少独特ID。 “id”是唯一的客户端ID,“date”是事务发生的时间。
以下是数据的样子:
示例数据:
id date
1 3/12/2016
2 3/14/2016
3 3/11/2016
1 4/19/2016
1 4/21/2016
3 5/21/2016
2 6/7/2016
1 6/8/2016
我希望结果是:
结果:
date percent
03-2016 100%
04-2016 33%
05-2016 33%
06-2016 66%
供参考:
length(unique(df$id)) = 3
关于我应该做什么的建议?
答案 0 :(得分:2)
我们可以使用by
并创建特定的TimePeriod
列:
dat$date <- as.Date(dat$date, '%m/%d/%Y')
dat$TimePeriod <- paste(format(dat$date, '%Y'),'-',format(dat$date, '%m'))
unique_id <- length(unique(dat$id))
setNames(stack(
by(dat, dat$TimePeriod, function(x) length(unique(x$id)) / unique_id)
), c('percent', 'date'))
percent date
1 1.0000000 2016 - 03
2 0.3333333 2016 - 04
3 0.3333333 2016 - 05
4 0.6666667 2016 - 06
dat <- read.table(text = 'id date
1 3/12/2016
2 3/14/2016
3 3/11/2016
1 4/19/2016
1 4/21/2016
3 5/21/2016
2 6/7/2016
1 6/8/2016', header = TRUE, stringsAsFactors = FALSE)