【问题标题】:Merging tables by two id simultaneously in R在R中同时通过两个id合并表
【发布时间】:2017-12-10 12:34:17
【问题描述】:

我有 3 个数据集

df1 has two column with id
df2 has one column with id
df3 has one column with id


df1=structure(list(id1.df1 = c(1L, 3L, 5L), id2.df1 = 4:6, ids = c(0.7, 
0.8, 0.9)), .Names = c("id1.df1", "id2.df1", "ids"), class = "data.frame", row.names = c(NA, 
-3L))

df2=structure(list(id1.df2 = c(1L, 3L, 5L), x3 = c(46L, 6546L, 65L
)), .Names = c("id1.df2", "x3"), class = "data.frame", row.names = c(NA, 
-3L))

df3=structure(list(id2.df3 = c(2L, 4L, 5L), x4 = c(5467L, 78L, 654L
)), .Names = c("id2.df3", "x4"), class = "data.frame", row.names = c(NA, 
-3L))

我需要合并这 3 个数据集,以便查询返回 匹配第一个数据集的 id1 和 id2 与第二个数据集的 id1 和第三个数据集的 id2 的字符串。

我期望的输出

id1-df1 id1-df2 ids id2-df1 x3  id2-df3 x4
    1   4        0,7    1   46     4    78
    3   5        0,8    3   6546   5    654
    5   6        0,9    5   65     6    5467

I.E,第一个数据集的 1 和 4 id 分别合并到第二个数据集的 1 id 和第三个数据集的 4 id。

你能帮我吗?

【问题讨论】:

    标签: r join merge


    【解决方案1】:

    首先,我认为您在提供 df3 数据的语句中存在错误。我认为你想要id2.df3 = c(6L, 4L, 5L)。使用该数据,您可以使用两次合并来完成此操作。

    merge(merge(df1, df2, by.x = 'id1.df1', by.y = 'id1.df2'),
      df3, by.x = 'id2.df1', by.y = 'id2.df3')
      id2.df1 id1.df1 ids   x3   x4
    1       4       1 0.7   46   78
    2       5       3 0.8 6546  654
    3       6       5 0.9   65 5467
    

    这仅包含一次 id1 和 id2 列,而不是像您提出的答案那样两次,但这些是完全多余的。如果需要,您可以添加额外的副本。

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 1970-01-01
      • 2021-12-27
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-20
      • 2012-12-11
      相关资源
      最近更新 更多