2016-07-12 1 views
0

Ich möchte zwei Datenrahmen durch zwei Spalten verbinden, die sie gemeinsam haben, aber ich möchte nicht, dass gegenseitige Paare als Duplikate betrachtet werden.Verbinden von Datenrahmen einschließlich beiderseitiger Paare

Beispieldatenrahmen wie folgt aussehen:

>df 
letter1 letter2 value 
d  e  1 
c  d  2 
c  e  4 

>dc 
letter1 letter2 
a  e 
c  a 
c  d 
c  e 
d  a 
d  c 
d  e 
e  a 

ich sie durch die ersten beiden Spalten anschließen möchten, in der dritten Spalte verlässt den Wert in df $ value und NA, wenn die Zeile in df nicht vorhanden ist. Ich habe versucht:

s <- join(dc,df, by = c("letter1","letter2")) 

>s 
letter1 letter2 value 
a  e  NA 
c  a  NA 
c  d  2 
c  e  4 
d  a  NA 
d  c  2 
d  e  1 
e  a  NA 

Hier wird das Paar d c gilt das gleiche wie c d und der Wert in der dritten Spalte ist die gleiche. Was ich will ist, dass d c als nicht vorhanden in df betrachtet wird, also ist ihr Zeilenwert NA. Mein gewünschter Ausgang ist:

Wie kann ich die Dataframes verbinden, so werden gegenseitige Paare als unterschiedliche Kombinationen betrachtet?

UPDATE: Es tut mir leid, aber ich habe gerade festgestellt, dass es ein Problem mit meinen Eingabedatenframes gab und dass die Join-Linie, die ich versuchte, tatsächlich funktioniert. Ich werde die erste Antwort akzeptieren, die auch dem Autor zugute kommt.

Antwort

0

könnten Sie merge anstelle von join:

merge(dc,df, by = c("letter1","letter2"),all=TRUE) 
+0

für meine früheren Leider tun sich ändern Kommentar, du hast Recht. Danke! –

1

Wir apply können Sie die Reihenfolge

df[1:2] <- t(apply(df[1:2], 1, sort)) 
dc <- t(apply(dc, 1, sort) 

und dann die join

0
#Creating the data frames 
df <- data.frame(letter1=c("d","c","c"), 
       letter2=c("e","d","e"), 
       value=c(1,2,4)) 

dc <- data.frame(letter1=c("a","c","c","c","d","d","d","e"), 
       letter2=c("e","a","d","e","a","c","e","a")) 

# Merging the data frames 
dout <- merge(df,dc,by=c("letter1","letter2"),all=T) 

# Outcome 
letter1 letter2 value 
1  c  d  2 
2  c  e  4 
3  c  a NA 
4  d  e  1 
5  d  a NA 
6  d  c NA 
7  a  e NA 
8  e  a NA 
Verwandte Themen