【问题标题】:R: Grouping and summarizing data to find the nth nearest event after date of referenceR:对数据进行分组和汇总以查找参考日期之后的第 n 个最近事件
【发布时间】:2023-03-17 09:02:02
【问题描述】:

我一直在使用一个数据集,其中包含客户(身份)、帐户创建日期(DATE ENTER)和客户用于在网站下订单的 GATE(表 A),但有些这些尝试都失败了,以及为什么第二个数据帧(表 B)与客户端(标识)、ERROR_DATE 和标识错误的 MAGIC_IP 作为旁注所有 GATES 和所有 MAGIC_IP 将始终不同,即使这意味着相同的客户标识。

表 A

GATE CLIENT DATE_ENTER
A 1 1
B 1 1
C 1 3
D 1 4
E 1 5
F 1 6
G 1 7
H 1 8
I 1 9
J 1 10
K 1 11
L 1 12
M 1 16

表 B

HOST CLIENT DATE_ERROR
14558556 1 2
14558557 1 3
14558558 1 4
14558559 1 5
14558560 1 6
14558561 1 7
14558562 3 8
14558563 2 9
14558564 3 10
14558565 3 11
14558566 1 12
14558567 1 13

我想要创建一个表格,我可以在其中看到每个“CLIENT”、“DATE ENTER”和“GATE”紧随其后的 ERROR_DATE 和 MAGIC_IP 是什么,或者换句话说就是下一个。预期结果应如下所示:

GATE CLIENT DATE_ENTER DATE_ERROR MAGIC_IP
A 1 1 2 154
B 1 1 2 154
C 1 3 4 156
D 1 4 5 157
E 1 5 6 158
F 1 6 7 159
G 1 7 10 160
H 1 8 10 160
I 1 9 10 160
J 1 10 11 163
K 1 11 12 164
L 1 12 13 165
M 1 16 N.A N.A

在这张表中,我可以看到每个 GATE。 CLIENT AND "DATE_ENTER" 每个客户的下一个或最近的 MAGIC_IP 和 ERROR_DATE 是什么,非常感谢所有愿意帮助我的人,

我尝试了什么?

我正在考虑在由 CLIENT 左加入两个表之后按 CLIENT、DATE_ENTER 和 GATE 进行分组,然后创建一个变量,该变量将减去所有日期并为每个组选择最小的正值作为索引来关联信息关于 MAGIC_IP 和 ERROR_DATE,但我目前似乎无法找到这样做的方法,谢谢大家的帮助

数据:

TableA<-tribble(~GATE,  ~CLIENT,    ~DATE_ENTER,
"A",    "1",    "1",
"B",    "1",    "1",
"C",    "1",    "3",
"D",    "1",    "4",
"E",    "1",    "5",
"F",    "1",    "6",
"G",    "1",    "7",
"H",    "1",    "8",
"I",    "1",    "9",
"J",    "1",    "10",
"K",    "1",    "11",
"L",    "1",    "12")

TableB<-tribble(~HOST,  ~CLIENT,    ~DATE_ERROR,
                "14558556", "1",    "2",
                "14558557", "1",    "3",
                "14558558", "1",    "4",
                "14558559", "1",    "5",
                "14558560", "1",    "6",
                "14558561", "1",    "7",
                "14558562", "3",    "8",
                "14558563", "2",    "9",
                "14558564", "3",    "10",
                "14558565", "3",    "11",
                "14558566", "1",    "12",
                "14558567", "1",    "13")

【问题讨论】:

    标签: r datetime group-by summarize data-wrangling


    【解决方案1】:

    通过CLIENT 连接TableATableB,并选择DATE_ERRORDATE_ENTER 之间正差最小的行。

    library(dplyr)
    
    TableA %>%
      mutate(row = row_number()) %>%
      left_join(TableB, by = 'CLIENT') %>%
      type.convert(as.is = TRUE) %>%
      group_by(row) %>%
      filter({tmp = DATE_ERROR - DATE_ENTER
              tmp == min(tmp[tmp > 0], na.rm = TRUE)
              }) %>%
      ungroup() %>%
      select(-row)
    

    【讨论】:

    • 谢谢!您的代码完美运行我有一个问题,我将如何创建一个变量来识别由 group_by 创建的组的数量?非常感谢我的朋友
    • 在这种情况下,每一行都被视为一个组。
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多