首页 > 解决方案 > 从两个数据框的列中匹配和提取值

问题描述

我想匹配两个数据框中两列的值并添加第三列,最好查看数据框:

FromA <- c("a", "b", "d")
ToA <- c("a", "k", "h")
PAC<- c("red", "blue", "black")
df1 <- data.frame(FromA, ToA, PAC)

> df1
      FromA ToA PAC
  1     a   a   red
  2     b   k  blue
  3     d   h black

FromB<- c("a", "b", "f") 
ToB  <- c("a", "k", "h")   
df2<-   data.frame(FromB, ToB)

 > df2
       FromB ToB
     1    a  a
     2    b  k
     3    f  h

df1$PAC如果两个第一列的值匹配,我希望第二个数据框获得 的值。最终结果:

 > DF2
       FromB ToB  PAC
     1    a  a    red
     2    b  k    blue
     3    f  h    NA

所以,我使用了 sapply()

  df2$PAC<- sapply(1:nrow(df2), function(i) 
            df1$PAC[df1$FromA==df2$FromB[i] & df1$ToA == df2$ToB[i] ])

如果两列完全匹配,该函数将起作用,否则,它会给我一个错误。

你能帮我理解我错过了什么吗?我会很感激的。

标签: rdataframe

解决方案


您可以简单地使用该merge功能:

merge(df1, df2, by.x = c("FromA", "ToA"), by.y = c("FromB", "ToB"), all.y = T)

推荐阅读