【问题标题】:Merge two dataframes according to their shared values [duplicate]根据它们的共享值合并两个数据框[重复]
【发布时间】:2018-05-16 09:16:07
【问题描述】:

我有两个数据框。第一个是这样的:

df1<-read.table(text="   V1  V2  V3  V4  V5
               1   a   a   1.5147654   1.5147654   1.5147654
               2   a   c   1.97638457  1.97638457  1.97638457
               3   c   d   1.55151792  -2.38160971 1.55151792
               4   a   b   2.25182522  2.25182522  -1.3523473
               5   b   d   1.85349445  1.85349445  1.85349445
               ",
               header=TRUE)

第二个如下:

df2<-read.table(text="   V1  V2  V3
                   1    a   b   1
                   2    c   a   1.5
                   3    d   b   3.5
                   4    d   c   5.1
                   ",
                   header=TRUE)

我想以这样的方式合并它们,使我的最终结果是这样的:

V1  V2  V3  V4  V5  V6
a   b   1   2.25182522  2.25182522  -1.3523473
c   a   1.5 1.97638457  1.97638457  1.97638457
d   b   3.5 1.85349445  1.85349445  1.85349445
d   c   5.1 1.55151792  -2.38160971 1.55151792

我的意思是,如果 df2 的前两列的值在 df1 的前两列,那么我想合并它们以获得上述结果。有什么想法吗?

【问题讨论】:

  • 澄清一下:您想根据列 AB 合并它们,但顺序无关紧要?
  • 我想根据 V1 和 V2 列合并它们。如果您的意思是例如 a 和 be 或 b 和 a ii,则按顺序无关紧要。

标签: r dataframe merge subset


【解决方案1】:

制作有序的key列然后合并:

df1$key <- apply(df1[1:2], 1, function(i) toString(sort(i)))
df2$key <- apply(df2[1:2], 1, function(i) toString(sort(i)))

merge(df2, df1, by = "key")
#    key V1.x V2.x V3.x V1.y V2.y     V3.y        V4        V5
# 1 a, b    a    b  1.0    a    b 2.251825  2.251825 -1.352347
# 2 a, c    c    a  1.5    a    c 1.976385  1.976385  1.976385
# 3 b, d    d    b  3.5    b    d 1.853494  1.853494  1.853494
# 4 c, d    d    c  5.1    c    d 1.551518 -2.381610  1.551518

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2017-09-03
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多