【发布时间】:2015-12-16 13:55:44
【问题描述】:
我想在两个不同的表上执行左连接,但基于两个不同的条件。第一个条件是 id 应该匹配,下一个条件是时间。并且连接的结果应该是两个条件的组合,但是按照特定的顺序。
例子:
表1
COUNTRY ID TIME VALUE
2 198 01-01-2014 00:00 18
2 198 01-01-2014 00:30 17
2 198 01-01-2014 01:00 16
2 147 01-01-2014 00:00 18
2 147 01-01-2014 00:30 19
2 147 01-01-2014 01:00 20
2 142 01-01-2014 00:00 22
2 142 01-01-2014 00:30 25
表2
COUNTRY IDENTITY TIME_UTC AMOUNT
2 198 01-01-2014 00:00 2
2 198 01-01-2014 00:30 5
2 198 01-01-2014 01:00 2
2 147 01-01-2014 00:00 6
2 147 01-01-2014 00:30 3
2 147 01-01-2014 01:00 4
我现在想离开加入 Table1 和 Table2。第一个条件匹配列 ID 和 IDENTITY,然后匹配列 TIME 和 TIME_UTC。
【问题讨论】:
-
您可能想检查
merge命令。在控制台上尝试?merge。 -
merge(Table1, Table2, by.x = ("ID" & "IDENTITY"), by.y = ("TIME" & "TIME_UTC"), all.x = TRUE)。我收到错误:“ID”和“IDENTITY”中的错误:操作只能用于数字、逻辑或复杂类型。我不确定如何将两个论点传递给 by 函数。
-
by.x应该传递表 1 的列名。尝试merge(table1, table2, by.x=c("ID", "TIME"), by.y = c("IDENTITY", "TIME_UTC"), all=T) -
使用合并(table1, table2, by.x=c("ID", "TIME"), by.y = c("IDENTITY", "TIME_UTC"), all=T)有用。但出于好奇,我尝试了left_join。 left_join(Table1, Table2, by.x = c("ID", "TIME"), by.y = c("IDENTITY", "TIME_UTC"), all = TRUE)。但它抛出了一个错误:加入:“IDENTITY”错误:不支持POSIXlt..这是由于数据类型问题吗? ID 和 IDENTITY 中的值都是 int 类型。
-
你从哪个包中得到
left_join?base中似乎没有