id在日期范围内出现的次数[r]

时间:2017-04-10 16:31:50

标签: r date

我看了herehere的答案,但我还没有得到我需要总结我的数据帧。我认为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

关于我应该做什么的建议?

1 个答案:

答案 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)