【发布时间】:2022-01-08 16:36:51
【问题描述】:
我正在使用 R 编程语言。假设我有以下两个表:
table_1 = data.frame(id = c("123", "123", "125", "125"), id2 = c("11", "12", "14", "13"),
date_1 = c("2010-01-31","2010-01-31", "2015-01-31", "2018-01-31" ))
table_1$id = as.factor(table_1$id)
table_1$id2 = as.factor(table_1$id2)
table_1$date_1 = as.factor(table_1$date_1)
table_2 = data.frame(id = c("123", "123", "125", "125"), id2 = c("111", "112", "14", "113"),
date_2 = c("2009-01-31","2010-01-31", "2010-01-31", "2010-01-31" ),
date_3 = c("2011-01-31","2010-01-31", "2020-01-31", "2020-01-31" ))
table_2$id = as.factor(table_2$id)
table_2$id2 = as.factor(table_2$id2)
table_2$date_2 = as.factor(table_2$date_2)
table_2$date_3 = as.factor(table_2$date_3)
如果满足以下两个条件中的任何一个(即 if Condition_1 = TRUE OR Condition_2 =对,然后“加入”)
Condition_1
- 如果 table_1$id = table_2$id
与
- if table_1$date BETWEEN(table_2$date_2,table_2$date_3)
Condition_2
- 如果 table_1$id2 = table_2$id2
与
- if table_1$date BETWEEN(table_2$date_2,table_2$date_3)
我已经尝试过:我知道如何分别执行这两个连接,例如:
library(sqldf)
#Condition_1
final = sqldf("select a.*, b.*
from table_1 a left join table_2 b
on a.id = b.id and
a.date_1 between
b.date_2 and
b.date_3")
#Condition_2
final_2 = sqldf("select a.*, b.*
from table_1 a left join table_2 b
on a.id2 = b.id2 and
a.date_1 between
b.date_2 and
b.date_3")
然后我可以将这些文件(“final_3”)“绑定”在一起(并删除完全重复的行):
final_3 = rbind(final, final_2)
final_3 = final_3[!duplicated(final_3[c(1,2,3,4,5,6,7)]),]
我的问题:有没有办法在一个步骤中将这两个表合并在一起,而不是两个单独的步骤?这可以使用 Base R 或 DPLYR 完成吗?
谢谢!
【问题讨论】:
-
final 和 final_2 有什么区别? Final_2 似乎是 final 的副本。
-
@Onyambu
final是id和final_2是id2。我想知道如何一步一步做到这一点......
标签: sql r join dplyr data-manipulation