R中的Excel vlookup函数用于数据框

时间:2013-04-08 15:12:56

标签: r

我的数据框有问题,希望在这里找到帮助。初始数据帧(我们称之为df1)包含一个ID号,可能会重复多次,可能不是有序的。

>df1
      ID
1   5468
2   5468
3   8896
4   8896

我想使用此ID,在另一个数据框(df2)中查找相应的国家/地区,看起来像这样:

>df2
    ID     country
1   5468   USA
2   8896   Canada

并在初始数据框中添加国家/地区。请注意,每个ID仅在第二个数据框中出现一次,但在第一个数据框中可以有多个外观。基本上我正在寻找类似于Excel“vlookup”功能的东西,仅适用于R。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

使用merge

df1 <- data.frame(ID=rep(c(5468,8896), each=2))
df2 <- data.frame(ID=c(5468,8896), country=c("USA","Canada"))

merge(df1, df2)
    ID country
1 5468     USA
2 5468     USA
3 8896  Canada
4 8896  Canada

答案 1 :(得分:3)

您可以使用match()

如果第一个是dataset1$ID[n],第二个是dataset2$ID

,就像

然后dataset2[match(dataset1$ID[n],dataset2$ID,2]

但是在大​​多数情况下,詹姆斯给出的答案要好一些,但如果你真的想要,那么匹配就更像vlookup。

答案 2 :(得分:1)

这使用环境查找等大型数据集,这可能比任何其他解决方案快得多:

df1 <- data.frame(ID=rep(c(5468,8896), each=2))
df2 <- data.frame(ID=c(5468,8896), country=c("USA","Canada"))

library(qdap)
df1$country <- lookup(df1[, 1], df2)

## binary operator for lookup
##  df1$country <- df1[, 1] %l% df2  

## > df1
##     ID country
## 1 5468     USA
## 2 5468     USA
## 3 8896  Canada
## 4 8896  Canada