2016-04-30 4 views

Antwort

2

Wir paste die Elemente in jeder Zeile für beide Datensätze und verwenden match den Index der passenden Saiten zu erhalten. Wenn es keine Übereinstimmung gibt, gibt es NA zurück. Beispielsweise entspricht die erste Zeile in 'A', d. H. "11 a", der dritten Zeile in 'B' "11 a", und match gibt diesen Index zurück. Ordnen Sie die Ausgabe als neue Spalte in "A" zu.

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 
+0

interessant, können Sie erklären, wie es funktioniert? –

+0

@MattMunson Danke, eine Beschreibung hinzugefügt. – akrun

3

Eine andere Lösung mit 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 
Verwandte Themen