是否有一个函数可以针对dataSet_1中的每个值在基于多个条件的dataSet_2中进行搜索? 就像在SQL中一样,对于每个值,执行新的搜索。
SELECT
value1Table1,
value2Table1,
(
SELECT MIN(value) FROM table_2 AS table_2
WHERE table_2.value1 = table_2.value1 AND table_1.Date > table_2.Date
) AS value1table2,
value3Table1
FROM table_1
从 MAX 更改为最小值和 <,>对以下示例进行查询:
我会尝试解释更多。通常,如果我有一个日期(factDate),并且对于每个用户(有您自己的不同日期),我需要搜索factDate之后发生的第一个事件。
例:
Table_1
|User|TargetEventDate|NextEventDate| <- Value that I want
|A |2018-04-17 |2018-04-18 | <- Value to Find
|B |2018-04-14 |2018-04-15 | <- Value to Find
Table_2
|User|DateEvent |
|A |2018-04-19|
|A |2018-04-18| <- Value that I want for user A
|A |2018-04-17| <- Value used in Table_1 for user A
|A |2018-04-13|
|A |2018-03-10|
|B |2018-04-17|
|B |2018-04-15| <- Value that I want for user B
|B |2018-04-14| <- Value user in Table_1 for user B
我没有看到将查询重写为更简单的方法,因为相关子查询中的WHERE
子句。 但是,好消息是R有一个名为sqldf
的包,它实际上可以执行常规SQL查询。
library(sqldf)
query <- "SELECT t1.value1Table1, t1.value2Table1,
(SELECT MAX(value) FROM table_2 t2
WHERE t1.value1 = t2.value1 AND t1.Date < t2.Date) AS value1table2,
t1.value3Table1
FROM table_1"
result <- sqldf(query)
我在这里假设table_1
和table_2
是实际的数据框,其列对应于查询引用的列。