gpt4 book ai didi

R:按 ID 和按指定数据聚合历史记录

转载 作者:行者123 更新时间:2023-12-04 22:03:32 25 4
gpt4 key购买 nike

我之前问过一个类似的问题,得到了很大的帮助:R: Aggregating History By ID By Date

不同之处在于,对于前一篇文章,我对汇总所有历史信息感兴趣,但现在我希望仅指定 90 天前的信息。

以下是我的数据外观示例:

strDates <- c("09/09/16", "5/7/16", "5/6/16", "2/13/16", "2/11/16","1/7/16",
"11/8/16","6/8/16", "5/8/16","2/13/16","1/3/16", "1/1/16")
Date<-as.Date(strDates, "%m/%d/%y")
ID <- c("A", "A", "A", "A","A", "A", "B","B","B","B","B", "B")
Event <- c(1,0,1,0,1,1, 0,1,1,1,0, 1)
sample_df <- data.frame(Date,ID,Event)

以及输出:

enter image description here

背景信息

我想保留每次遭遇的所有附加信息,然后按 id 将以下历史信息聚合回 90 天。
  • 过去 90 天内的先前相遇次数
  • 过去 90 天内的先前事件数

  • 示例

    例如,让我们看看第 2 行。

    第 2 行是 ID A,因此我将引用第 3-6 行(发生在第 2 行遭遇之前)。在这组行中,我们看到第 3、4、5 行都发生在过去 90 天内,第 6 行发生在感兴趣的时间之外。

    从第 2 行开始的过去 90 天内的先前遭遇次数:3 次遭遇

    从第 2 行开始的过去 90 天内的先前事件数:2 个事件(5/6/16 和 2/11/16)

    期望输出

    理想情况下,我会得到以下输出:

    enter image description here

    最佳答案

    这是一个非常有效的替代 data.table 解决方案。这利用了 v 1.10.0 中引入的新非对等连接与 by = .EACHI 相结合,允许您在连接时对每个连接进行计算

    library(data.table) #v1.10.0
    setDT(sample_df)[, Date2 := Date - 90] # Set range (Maybe in future this could be avoided)
    sample_df[sample_df, # Binary join with itself
    .(Enc90D = .N, Ev90D = sum(Event, na.rm = TRUE)), # Make calculations
    on = .(ID = ID, Date < Date, Date > Date2), # Join by
    by = .EACHI] # Do calculations per each match
    # ID Date Date Enc90D Ev90D
    # 1: A 2016-09-09 2016-06-11 0 0
    # 2: A 2016-05-07 2016-02-07 3 2
    # 3: A 2016-05-06 2016-02-06 2 1
    # 4: A 2016-02-13 2015-11-15 2 2
    # 5: A 2016-02-11 2015-11-13 1 1
    # 6: A 2016-01-07 2015-10-09 0 0
    # 7: B 2016-11-08 2016-08-10 0 0
    # 8: B 2016-06-08 2016-03-10 1 1
    # 9: B 2016-05-08 2016-02-08 1 1
    # 10: B 2016-02-13 2015-11-15 2 1
    # 11: B 2016-01-03 2015-10-05 1 1
    # 12: B 2016-01-01 2015-10-03 0 0

    关于R:按 ID 和按指定数据聚合历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537187/

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