gpt4 book ai didi

r - 根据多个引用日期计算每个客户的事件发生次数

转载 作者:行者123 更新时间:2023-12-04 10:41:05 25 4
gpt4 key购买 nike

我对 R 相当陌生,我有一个包含客户编号和几千个事件日期的数据集。数据格式如下:

data <- data.frame("Client"=c(rep(1, 4), rep(2, 3), rep(3, 2)), "Date"=as.Date(c("2015-11-20", "2015-12-04", "2016-01-08", "2016-04-07", "2015-12-19", "2016-02-02", "2016-02-21", "2016-01-04", "2016-02-12")), "Event"=rep(1, 9))
data
Client Date Event
1 1 2015-11-20 1
2 1 2015-12-04 1
3 1 2016-01-08 1
4 1 2016-04-07 1
5 2 2015-12-19 1
6 2 2016-02-02 1
7 2 2016-02-21 1
8 3 2016-01-04 1
9 3 2016-02-12 1

给定一组引用日期,
 refdates <- as.Date(c("2016-01-01", "2016-03-01"))

我想计算每个客户在 (1) 引用日期后 30 天、(2) 引用日期前 0-30 天和 (3) 引用日期前 31-60 天发生的事件数引用日期。

我希望输出是一个如下所示的数据框:
  Client    RefDate post30 prior30 prior31.60
1 1 2016-01-01 1 1 1
2 1 2016-03-01 0 0 1
3 2 2016-01-01 0 1 0
4 2 2016-03-01 0 2 0
5 3 2016-01-01 1 0 0
6 3 2016-03-01 0 1 1

我觉得我应该能够使用 plyr 来做到这一点,但我感觉有点不知所措。有人能指出我正确的方向吗?

最佳答案

这是一个基本的R方法。

do.call(rbind, lapply(refdates, FUN=function(i) {
aggregate(cbind("post30"=data$Date - i > -1 & data$Date - i < 31,
"prior30"=data$Date - i > -31 & data$Date - i < 0,
"prior31.60"=data$Date - i > -61 & data$Date - i < -30),
list(data$Client), FUN=sum)
}))

这是一个快速分解:
  • aggregate函数对特定引用日期的每个客户端的时间窗口内的逻辑值求和。
  • cbind允许我们一次计算多个窗口并向输出添加名称。
  • lapply贯穿引用日期并调用 aggregate .这将返回我们正在寻找的列表。
  • 最后,do.call接收这个 data.frames 列表和 rbinds它们来创建单个 data.frame。
  • 关于r - 根据多个引用日期计算每个客户的事件发生次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37685042/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com