【问题标题】:How to match column values from one data frame to column values of another in R [duplicate]如何将一个数据框的列值与R中另一个数据框的列值匹配[重复]
【发布时间】:2018-03-23 10:52:58
【问题描述】:

您好,我有 2 个数据框:

d <- data.frame(v1 = c("A","B","C","D","E","F","G","H"), 
                v2 = c(1,2,3,4,5,6,7,8),
                v3 = c(1,2,3,4,5,6,7,8))                )

m<-data.frame(v4 = c("B","H","A","C","D"))

我想更改m 以使m$v4 匹配d$v1 并创建一个m$v5d$v2 的相关数据和一个m$v6 与相关数据d$v3 基于匹配。

我的最终m 数据框应如下所示:

 m
  v4 v5 v6
1  B  2  2
2  H  8  8
3  A  1  1
4  C  3  3
5  D  4  4

【问题讨论】:

  • 我会这样做:d$v2[match(m$v3, d$v1)]
  • 我编辑了问题

标签: r merge match


【解决方案1】:

有很多方法可以做到这一点:

  1. 使用dplyr::left_join:

    dplyr::left_join(m, d, by = c("v3" = "v1"))
    #  v3 v2
    #1  B  2
    #2  H  8
    #3  A  1
    #4  C  3
    #5  D  4
    
  2. 使用merge

    merge(m, d, by.x = "v3", by.y = "v1", sort = F)
    #  v3 v2
    #1  B  2
    #2  H  8
    #3  A  1
    #4  C  3
    #5  D  4
    

更新

与您修改后的样本数据类似

merge(m, d, by.x = "v4", by.y = "v1", sort = F)
#  v4 v2 v3
#1  B  2  2
#2  H  8  8
#3  A  1  1
#4  C  3  3
#5  D  4  4

【讨论】:

  • 我编辑了问题
  • @firmo23 我的回答也是。
【解决方案2】:

我们可以从base R使用match

m$v4 <- d$v2[match(m$v3, d$v1)]

更新

如果我们有多个列,则遍历感兴趣的列并执行match

m[paste0("v", 5:6)] <- lapply(d[-1], function(x) x[match(m$v4, d$v1)])
m
#   v4 v5 v6
#1  B  2  2
#2  H  8  8
#3  A  1  1
#4  C  3  3
#5  D  4  4

【讨论】:

  • 我编辑了问题
  • @firmo23 更新帖子
猜你喜欢
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多