2016-06-22 12 views
0

Ich versuche, vlookup Typ Funktionalität in R zu implementieren. Ich habe zwei Datenrahmen - Id-Spalte hat eindeutige Werte.Vergleicht man zwei Spalten unterschiedlicher Länge in R

# DataFrame1 - df1 
Data ID  C1  C2  C3 
R1  ax  12  33  11 
R2  ay  11   2  0 
R3  az  3   3  0 
R4  ar  2   3  1 
R5  ag  2   3  1 

# DataFrame2 - df2 
Id 
ax 
ay 

Ich möchte alle Daten erhalten und seine Zählung von DataFrame1 zu erhalten, für die es eine Übereinstimmung zwischen Ids von DataFrame2 und DataFrame1 ist.

ausgegeben werden soll -

Data ID C1 C2 C3 
R1 ax 12 33 11 
R2 ay 11 2 0 

und seine Zählung 2

auch sein, ist dies möglich, ohne Merge-Funktion?

+2

check '% in%' oder 'match'. – Psidom

+0

@Joe: Antwort auf eine ungenaue Übereinstimmung: Da deine Frage im Moment nicht nach dieser Lösung fragt, solltest du SO suchen und wenn du keine Antwort findest, postest du eine andere Frage mit einem Beispiel, das tatsächlich die Möglichkeit bietet eine ungenaue Übereinstimmung. Ich weiß, dass ich zuvor eine ähnliche Frage beantwortet habe, aber es ist möglich, dass Sie den Suchbegriff "Fuzzy Matching" nicht finden. Versuchen Sie auch "teilweise" oder "ungenau". –

Antwort

3

Um Ihren ersten Datenrahmen von Ihrer zweiten Teilmenge, dann die Anzahl der Zeilen zählen:

z=df1[df1$ID %in% df2$Id,] 
count=nrow(z) 
+0

Funktioniert diese Funktion genau? Ich meine, wenn wir ID ax in einem Datenrahmen und ID axh im zweiten Datenrahmen haben, wird diese Methode den Unterschied identifizieren? – Joe

+1

@Joe Sie könnten in "Fuzzy Matching" suchen, wenn Sie nicht genau übereinstimmende IDs haben. – Frank

+1

Das 'was' ist überflüssig. Die Verwendung von 'df1 $ ID% in% df2 $ Id' als' i' Argument wäre effizienter. –

0

dplyr Verwendung:

library(dplyr) 
inner_join(df1, df2, by = c("ID" = "Id")) # Because Id columns names are different 
inner_join(df1, df2) # If the Id columns were the same 

sqldf Verwendung:

library(sqldf) 
sqldf('SELECT * FROM df1 JOIN df2 USING (ID)') # Not case sensitive 

Ausgang:

Data ID C1 C2 C3 
1 R1 ax 12 33 11 
2 R2 ay 11 2 0 
Verwandte Themen