r - 根据间隔条件合并数据帧
问题描述
我有一个这样的数据框
id start end
1 20/06/88 24/07/89
1 27/07/89 13/04/93
1 14/04/93 6/09/95
2 3/01/92 11/02/94
2 30/03/94 16/04/96
2 17/04/96 18/08/97
我想与这个其他数据框合并
id date
1 26/08/88
2 10/05/96
生成的合并数据框应如下所示
id start end date
1 20/06/88 24/07/89 26/06/88
1 27/07/89 13/04/93 NA
1 14/04/93 6/09/95 NA
2 3/01/92 11/02/94 NA
2 30/03/94 16/04/96 NA
2 17/04/96 18/08/97 10/05/96
在实践中,我想基于 id 合并两个数据帧,并且日期必须位于第一个数据帧的开始和结束变量所跨越的间隔内。
你对如何做到这一点有什么建议吗?我尝试使用fuzzyjoin 包,但我有一些内存问题..
非常感谢大家
解决方案
可能是骗子,当我找到一个好的目标时会删除。同时,我们可以使用fuzzyjoin
library(tidyverse)
library(fuzzyjoin)
df1 %>%
mutate_at(2:3, as.Date, "%d/%m/%y") %>%
fuzzy_left_join(
df2 %>% mutate(date = as.Date(date, "%d/%m/%y")),
by = c("id" = "id", "start" = "date", "end" = "date"),
match_fun = list(`==`, `<`, `>`))
# id.x start end id.y date
#1 1 1988-06-20 1989-07-24 1 1988-08-26
#2 1 1989-07-27 1993-04-13 NA <NA>
#3 1 1993-04-14 1995-09-06 NA <NA>
#4 2 1992-01-03 1994-02-11 NA <NA>
#5 2 1994-03-30 1996-04-16 NA <NA>
#6 2 1996-04-17 1997-08-18 2 1996-05-10
剩下的就是整理id
列。
样本数据
df1 <- read.table(text = "
id start end
1 20/06/88 24/07/89
1 27/07/89 13/04/93
1 14/04/93 6/09/95
2 3/01/92 11/02/94
2 30/03/94 16/04/96
2 17/04/96 18/08/97", header = T)
df2 <- read.table(text = "
id date
1 26/08/88
2 10/05/96 ", header = T)
推荐阅读
- slurm - salloc:错误:作业提交/分配失败:功能规范无效
- javascript - 如何为 Chart.js 图表中的每个水平条制作自定义 stepSize
- flutter - Flutter TikTokStyleFullPageScroller()在空(非内容)屏幕上不起作用
- firebase - Firebase 功能 - 客户端 IP 始终为 Google 内部
- sql - 选择 R sqldf 包中除一列之外的所有列
- python - 为什么在 kivy 样式文件中使用尖括号时总是出现“无效语法”错误?
- asp.net-web-api - 标头缓存控制:无缓存
- angular - VS Code 无法解析新创建的 Angular 文件中的应用程序路径
- firebase - 检测 Firestore 错误
- python - 如何结合时间列和月份列来制作日期时间