【问题标题】:Left join with two unique conditions in R左连接与 R 中的两个独特条件
【发布时间】:2021-08-03 08:58:49
【问题描述】:

抱歉,如果之前已经回答过这个问题,我看了一下,但在任何其他线程中都找不到可行的解决方案。 我有两个大型(45 列上 > 600k 行)数据集,我必须根据两个条件合并它们。 逻辑如下:

tmp0:

  id     date    value1
1  001   200001  1
2  001   200002  1.5
3  001   200003  0.75
4  002   200001  1
5  002   200002  1.58
6  002   200003  0.5

tmp1:

  id     date    value2
1  001   200001  3
2  001   200002  2.5
3  001   200003  0.5
4  002   200001  0.25
5  002   200002  1
6  002   200003  0.85

我只是想根据条件 id 和日期合并它们,创建类似的东西。

  id     date    value1 value2 
1  001   200001  1       3
2  001   200002  1.5     2.5
3  001   200003  0.75    0.5
4  002   200001  1       0.25
5  002   200002  1.58    1
6  002   200003  0.5     0.85

由于它们的顺序并不像上面那样完美,我不能使用 rbind 来简单地合并。

我试过了

tmp2 <- left_join(tmp0, tmp1, by=c("id","date"))

但它给了我一个 12x4 矩阵而不是 6x4...

任何建议,非常感谢。

谢谢,最好的, D.

【问题讨论】:

  • 看不出代码有什么问题。只需在 left_join 之前使用 dplyr::
  • 忘了说。 dplyr 库已打开。还是不行。
  • 刚刚使用您的示例数据运行了您的代码。奇迹般有效。请发布您得到的有问题的结果。
  • 请将dput(tmp0)dput(tmp1) 的输出发布到您的帖子中。
  • 现在可以使用了!多谢你们。我再次从头开始运行整个数据集,我确实怀疑数据帧的类别首先存在错误,这就是他无法找到/匹配这两个条件的原因。

标签: r merge left-join rbind


【解决方案1】:

R 可能会将数据帧的前 2 列读取为数字,而不是字符。您可以通过输入 sapply(tmp0, class) 来检查变量的实际类型。

也许你想试试这个:

tmp0$id <- as.character(tmp0$id)
tmp1$id <- as.character(tmp1$id)

tmp0$date <- as.character(tmp0$date)
tmp1$date <- as.character(tmp1$date)

tmp2 <- dplyr::full_join(tmp0,tmp1, by=c("A","B"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多