gpt4 book ai didi

python - 如何在使用 R 按 ID 分组的不同列中找到另一个日期之后的最近日期?

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

我正在寻找一种方法,该方法将查看“日期 A”中的每个日期,并通过 ID (group_by) 在“日期 B”中的该值之后找到下一个最近的日期。然后我想计算天数的差异。下面是我想要的表格。

ID    |  Date A    |  Date B     | Difference| 
11111 | 09/01/21 | 09/03/21 | 2 |
22222 | 09/06/21 | 09/20/21 | 11 |
11111 | 09/08/21 | 09/18/21 | 10 |
44444 | 09/04/21 | NA | 11 |
44444 | 09/10/21 | 09/15/21 | 5 |
22222 | NA | 09/17/21 | NA |
77777 | NA | 10/16/21 | NA |
77777 | 09/04/21 | 10/17/21 | 24 |
77777 | 09/01/21 | 09/28/21 | 27 |

如果你能帮我解决这个问题,我将不胜感激!

干杯

最佳答案

通过 group_by 解决方案的 dplyr 解决方案在这里对我来说并不明显,但这里是一个相对简单的 sqldf 解决方案。如果您真的需要,大概这可以转化为 dplyr 解决方案。

首先在R中模拟数据

df <- dplyr::tribble(
~'ID', ~'Date A', ~'Date B',
11111, '09/01/21', '09/03/21',
22222, '09/06/21', '09/20/21',
11111, '09/08/21', '09/18/21',
44444, '09/04/21', NA ,
44444, '09/10/21', '09/15/21',
22222, NA , '09/17/21',
77777, NA , '10/16/21',
77777, '09/04/21', '10/17/21',
77777, '09/01/21', '09/28/21'
)
df$`Date A` <- lubridate::mdy(df$`Date A`)
df$`Date B` <- lubridate::mdy(df$`Date B`)
df

看起来像

# A tibble: 9 x 3
ID `Date A` `Date B`
<dbl> <date> <date>
1 11111 2021-09-01 2021-09-03
2 22222 2021-09-06 2021-09-20
3 11111 2021-09-08 2021-09-18
4 44444 2021-09-04 NA
5 44444 2021-09-10 2021-09-15
6 22222 NA 2021-09-17
7 77777 NA 2021-10-16
8 77777 2021-09-04 2021-10-17
9 77777 2021-09-01 2021-09-28

然后进行不等式连接和分组依据。添加列 I 以允许数据的细微差别,例如每个 ID 中的多个相同日期 A

df$I <- 1:nrow(df)

df <- sqldf::sqldf('
SELECT a.I, a.ID, a."Date A", a."Date B",
MIN(b."Date B") AS NextB
FROM df a
LEFT JOIN df b
ON a.ID = b.ID
AND a."Date A" < b."Date B"
GROUP BY a.I, a.ID, a."Date A", a."Date B"
ORDER BY a.I
')

df$Difference = df$NextB - as.integer(df$`Date A`)
df$I <- NULL
df$NextB <- NULL
df

它与您的示例数据相匹配(并且应该很好地概括不在您的示例数据中的边缘情况)。不清楚它可以扩展到非平凡数据的程度。

     ID     Date A     Date B Difference
1 11111 2021-09-01 2021-09-03 2
2 22222 2021-09-06 2021-09-20 11
3 11111 2021-09-08 2021-09-18 10
4 44444 2021-09-04 <NA> 11
5 44444 2021-09-10 2021-09-15 5
6 22222 <NA> 2021-09-17 NA
7 77777 <NA> 2021-10-16 NA
8 77777 2021-09-04 2021-10-17 24
9 77777 2021-09-01 2021-09-28 27

关于python - 如何在使用 R 按 ID 分组的不同列中找到另一个日期之后的最近日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72130552/

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