从两个数据框的列中匹配并提取值

时间:2019-06-19 12:26:21

标签: r dataframe

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

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] ])

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

您能帮助我了解我所缺少的吗?我会很感激的。

1 个答案:

答案 0 :(得分:1)

您可以简单地使用merge函数:

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