对于'A`中与`B`中的行`j`匹配的每一行'i`,将`j`的索引分配给`i`的列

时间:2016-04-30 02:49:13

标签: r

例如,如果我们有两个数据框:

A
11  a
11  d  
12  b
13  c

B
13 c
10 b
11 a

->
11 a 3
11 d NA
12 b NA
13 c 1

2 个答案:

答案 0 :(得分:3)

使用data.table的另一种解决方案:

library(data.table)

df1 <- data.table(id = c(11,11,12,13),v = c('a','d','b','c'))

df2 <- data.table(id = c(13,10,11), v = c('c','b','a'))

## merging the two data tables with all values for x retained

merge(df1,df2[,.(id,v,.I)],by=c('id','v'),all.x = T)
##   id v  I
##1: 11 a  3
##2: 11 d NA
##3: 12 b NA
##4: 13 c  1

答案 1 :(得分:2)

我们paste两个数据集的每一行中的元素,并使用match来获取匹配字符串的索引。如果没有匹配,则返回NA。例如,A&#39;中的第一行即"11 a"匹配&#39; B&#39;中的第三行。 "11 a"match返回该索引。将输出分配为&#34; A&#34;。

中的新列
A$ind <- match(do.call(paste, A), do.call(paste, B))
A
#  v1 v2 ind
#1 11  a   3
#2 11  d  NA
#3 12  b  NA
#4 13  c   1