【问题标题】:R lang: Join two tables but replace colliding columns with data from a specified tableR lang:连接两个表,但用指定表中的数据替换冲突列
【发布时间】:2021-06-13 19:00:07
【问题描述】:

在标准 R(或 dplyr)中是否存在连接两个表/data.frames 并具有列冲突条件的现有方法?

已经尝试过 dplyr 的连接,但它们受到匹配列名要求的限制。我需要能够加入任意两个表,无论它们的列名如何。

以下是一些数据和预期输出:

> require(dplyr)
> data <- data.frame(a = 1:3, b = 11:13, c = 21:23, d = 101:103)
  a  b  c   d
1 1 11 21 101
2 2 12 22 102
3 3 13 23 103

REPLACE_LEFT_JOIN(select(data, a, b), select(data, c, d), collisionKeep = "right")
  a  b
1 1 11
2 2 12
3 3 13
REPLACE_LEFT_JOIN(select(data, a, b), mutate(select(data, a, c, d), a = a-1), collisionKeep = "right")
  a  b
1 0 11
2 1 12
3 2 13
REPLACE_FULL_JOIN(select(data, a, b), mutate(select(data, a, c, d), a = a-1), collisionKeep = "right")
  a  b  c   d
1 0 11 21 101
2 1 12 22 102
3 2 13 23 103

【问题讨论】:

    标签: r join dplyr


    【解决方案1】:

    我编写了这些确实可以工作的函数,但我觉得我已经重新发明了轮子 + 它们的逻辑无法扩展到,例如,left_join,你想在左表中继续碰撞列。

    require(dplyr)
    # Keeps everything from MINOR table but replaces colliding cols with MAJOR's cols.
    replace_left_join <- function(data_minor, data_major) {
        c_sameMinor <- names(data_minor) %in% names(data_major)
        c_sameMajor <- names(data_major) %in% names(data_minor)
        data_merge <- data_minor
        data_merge[c_sameMinor] <- data_major[c_sameMajor][, names(data_merge[c_sameMinor])]
        data_merge
    }
    # Keeps everything from both tables but replaces colliding cols with MAJOR's cols.
    replace_full_join <- function(data_minor, data_major) {
        c_sameMinor <- names(data_minor) %in% names(data_major)
        c_sameMajor <- names(data_major) %in% names(data_minor)
        data_merge <- data_minor
        data_merge[c_sameMinor] <- data_major[c_sameMajor][, names(data_merge[c_sameMinor])]
        bind_cols(data_merge, data_major[!c_sameMajor])
    }
    

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多