【问题标题】:How to join two tables based on two different conditions in R?如何根据R中的两个不同条件连接两个表?
【发布时间】: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_joinbase 中似乎没有

标签: r left-join


【解决方案1】:

您可以先用列 ID 左连接表 1 和表 2(使用 dplyr 或 data.table),然后过滤结果以确保它只保留列 TIME 和 TIME_UTC 相等的行。

【讨论】:

    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多