例如,如果我们有两个数据框:
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
答案 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