【问题标题】:Merging two data frames with dyplr left join使用 dyplr 左连接合并两个数据帧
【发布时间】:2019-10-22 06:11:44
【问题描述】:

我正在尝试使用右连接与 dplyr 合并两个数据帧,但想知道我是否应该使用交叉连接。我已经阅读了多个其他相关线程including this one which was helpful,但无济于事。

简而言之,右连接对我有用,但它将两个数据帧之间的公共变量再现为单独的 .x 和 .y 变量。我只想将一个特定的变量(列)从左侧(x)数据帧添加到右侧(y)数据帧(具有更多行/观察值)与“SUBJECT”键变量匹配。

我不确定如何修改下面的代码以实现所需的结果,以便对从 x 数据帧合并的特定变量的观察结果在 y 数据帧中没有此变量的值是“N/A ”。值得注意的是,x 中存在的几乎所有变量都存在于 y 中(X 是 Y 的子集),但我只想匹配 SUBJECT 变量。以下是我当前的代码。

DF_merged <- right_join(DF.X, DF.Y, by = 'SUBJECT')

【问题讨论】:

    标签: r merge dplyr


    【解决方案1】:

    您可能希望选择要合并的数据框的子集。 一种选择是简单地使用 base R 进行合并,其中 by.y 表示右连接。

    我试图在这里创建一个可重现的示例:

    DF.X <- data.frame(SUBJECT = 1:5,
                       COLUMN.A = 5:9,
                       COLUMN.B = 11:15)
    
    DF.Y <- data.frame(SUBJECT = 1:15,
                       COLUMN.B = 11:25,
                       COLUMN.C = 15:29)
    
    DF_merged <- merge(x = DF.X[ ,c("SUBJECT", "COLUMN.A")], y = DF.Y, by = "SUBJECT", all.y = TRUE)
    

    【讨论】:

    • 使用该代码会导致以下错误消息。我想知道这是否是 b/c “SUBJECT”仅适用于 Y 案例的一个子集。澄清一下:X 数据框只有一个观察子集作为 Y,但相同的列和两个唯一的列我想与 Y 数据框合并。 Y 中没有这些唯一 X 列的值的观察结果将返回(理想情况下)N/As 错误:by 不能包含连接列 SUBJECT,LHS 调用 rlang::last_error() 中缺少该列以查看回溯跨度>
    • @G.Grothendieck 看到了你的这个贡献,希望你能阐明它在使用“关键”变量 (SUBJECT) stackoverflow.com/a/14103393/5825064 的情况下如何应用
    • 我编辑了代码,因为我将基础 R 与 dplyr(右连接)混合在一起。在上面的示例中,我建议使用 base-R 选项。
    • 合并路线确实有效,这也是我所采用的。然而,这有点尴尬/非最佳,因为生成的数据帧同时保留了 .x 和 .y 变量。这不是一个大问题,因为变量可以作为第 n 行的函数清楚地区分,但想知道如何只保留“完整”变量。更具体地说:我只是在数据框中添加两个变量,而不是案例,因为基础数据框包含所有案例。
    • 你能重新创建你描述的例子吗?如果您只想添加列,请确保在子集中只允许“唯一”变量(显然 ID 除外)。否则,如果您只想将列添加到现有数据框,请考虑 cbind
    猜你喜欢
    • 2016-10-30
    • 2020-04-07
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 2018-03-18
    • 2017-12-17
    • 2020-10-08
    • 2011-04-21
    相关资源
    最近更新 更多