如何在R中进行哈希调用

时间:2013-06-25 09:43:48

标签: r dataframe

我有一个如下所示的数据框:

 n <- c("foo","bar","qux","qux","bar")
 k <- c(100,200,300,400,500)
 z <- c("z","w","x","y","v")
 df1 <- data.frame(n,k,z)
 df1 
   n   k z
1 foo 100 z
2 bar 200 w
3 qux 300 x
4 qux 400 y
5 bar 500 v

给出第二个数据框

l <- c("k1","k2","k3","k4","k5")
n2 <- c("foo","bar","qux","qux","bar")  # name difference of (n2) is intentional
df2 <- data.frame(n2,l)
   n2 l
1 foo k1
2 bar k2
3 qux k3
4 qux k4
5 bar k5

我想创建具有以下条件的第三个数据框:

  

使用df1作为来源来创建第三个​​数据框和   对于df1中<{1}}的 n2 ,每行检查参考 n

所以最后我想要这个:

df2

这样做的方法是什么?

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找match

  

匹配返回其(第一)匹配位置的向量   第二个论点。

m <- df1
cbind(m,call=df2$l[match(df1$n ,df2$n2)])
    n   k z call
1 foo 100 z   k1
2 bar 200 w   k2
3 qux 300 x   k3
4 qux 400 y   k3
5 bar 500 v   k2

另一种选择是使用merge,但您应该删除重复的内容:

hh <- merge(df1,df2,by.x='n',by.y='n2')
hh[!duplicated(hh[,1:3]),]
    n   k z  l
1 bar 200 w k2
3 bar 500 v k2
5 foo 100 z k1
6 qux 300 x k3
8 qux 400 y k3