【发布时间】:2021-11-30 12:27:57
【问题描述】:
我有一个数据框,我正在尝试根据个人 ID 和 date_diff 列的组合创建两个新列,max_start_date 和 max_end_date。我的问题是,一个人可能有多个日期差异。我的例子如下:
ex <- structure(list(person_id = c(1, 1, 1, 1, 1, 1, 1, 1, 1), serv_from_dt = structure(c(18262,
18262, 18263, 18264, 18275, 18275, 18275, 18278, 18291), class = "Date"),
serv_to_dt = structure(c(18262, 18265, 18263, 18264, 18275,
18278, 18278, 18278, 18291), class = "Date"), days_diff = c(0,
3, 0, 0, 0, 3, 3, 0, 0)), row.names = c(NA,
-9L), class = c("data.table", "data.frame"))
如您所见,最小/最大日期组是:2020-01-01/2020-01-04(days_diff 为 3)、2020-01-14/2020-01-17(days_diff 为 3) , 和 2020-01-30/2020-01-30(因为没有与 2020-01-30 重叠的日期)。
我想要的输出如下所示:
output <- structure(list(person_id = c(1, 1, 1, 1, 1, 1, 1, 1, 1), serv_from_dt = structure(c(18262,
18262, 18263, 18264, 18275, 18275, 18275, 18278, 18291), class = "Date"),
serv_to_dt = structure(c(18262, 18265, 18263, 18264, 18275,
18278, 18278, 18278, 18291), class = "Date"), days_diff = c(0,
3, 0, 0, 0, 3, 3, 0, 0), max_start_date = c("2020-01-01",
"2020-01-01", "2020-01-01", "2020-01-01", "2020-01-14", "2020-01-14",
"2020-01-14", "2020-01-14", "2020-01-30"), max_end_date = c("2020-01-04",
"2020-01-04", "2020-01-04", "2020-01-04", "2020-01-17", "2020-01-17",
"2020-01-17", "2020-01-17", "2020-01-30")), row.names = c(NA,
-9L), class = c("data.table", "data.frame"))
到目前为止,我有
claims_sample[,days_diff := time_length(serv_to_dt-serv_from_dt, unit = 'days'), prs_nat_key][,`:=`(max_start_date =
serv_from_dt[which.max(days_diff)],
max_end_date = serv_to_dt[which.max(days_diff)]), prs_nat_key]
但这只会在整个列中重复 2020-01-01 和 2020-01-04。我将非常感谢有关如何解决此问题的任何帮助和建议。提前致谢!
【问题讨论】:
-
如何区分相关日期组?
-
这是最棘手的部分。我的思考过程是按最大/最小日期创建组。一组是 01/1-01/4 内的任何行,另一组是 14-17 内的任何行,因为这些最大/最小开始日期和结束日期对于一个人来说永远不会重叠。 @rjen
标签: r dataframe data.table tidyverse