0

我的数据框有问题,希望在这里找到帮助。初始数据帧(我们称其为 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。

我将非常感谢任何帮助!

4

3 回答 3

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
于 2013-04-08T15:18:40.553 回答
3

您可以使用match().

就像第一个是dataset1$ID[n],第二个是dataset2$ID

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

但在大多数情况下,詹姆斯给出的答案要好得多,但如果你真的想要,匹配更类似于 vlookup。

于 2013-04-08T15:21:38.563 回答
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
于 2013-04-08T16:51:38.330 回答