R - 使用 <= 或 >= 的类似 Vlookup 的功能



是否有一个函数可以针对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_1table_2是实际的数据框,其列对应于查询引用的列。