我的数据框有问题,希望在这里找到帮助。初始数据帧(我们称之为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。
非常感谢任何帮助!
答案 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