2016-06-13 9 views
0

Ich habe zwei Datensätze, die ich über zwei identifizieren Variablen fusionieren möchte (und ver_u):Warum gibt es Unterschiede bei der Verwendung von Zusammenführung und% in%?

df1 looks like this: 
    up   ver_u 
    257001   1 
    1010   1 
    101010   1 
    100316   1 

df2 looks like this: 
up    ver_u  code_uc  quantity 
500116   1   395884    1 
100116   1   36761    2 
160116   1   81308    3 
100116   1   76146    1 
113216   1   6338    1 
101116   1   33887    1 

Was würde ich gerne tun, um eine Teilmenge von DF2 zu nehmen, wo ihre und ver_u Streichhölzern mit denen in df1. Ich habe das auf zwei verschiedene Arten gemacht und verschiedene Antworten bekommen.

Erste Methode:

pur <- merge(df2, df1,by=c("up","ver_u")) 

Zweite Methode:

test <- df2[(df2$up %in% df1$up) & (df2$ver_u %in% df1$ver_u),] 

Sie geben mir unterschiedliche Anzahl von Beobachtungen und ich sehe nicht, warum sie mir einen Unterschied geben.

Als ich den Dataframe-Test mit dem folgenden Code kombinierte, erhielt ich die gleiche Anzahl von Beobachtungen, aber die beiden resultierenden Datenrahmen, die ich bekam, sind immer noch unterschiedlich.

pur1 = merge(test, df1,by=c("up","ver_u")) 

Gibt es einige systematische Unterschiede bei der Verwendung von Zusammenführen und% in%?

Ich würde sehr viel Verständnis dafür haben.

Antwort

4

Weil merge Zeile für Zeile für beide Spalten vergleicht, während %in% eine Zeile mit allen anderen Zeilen vergleicht. Beispiel:

#dummy data 
df1 <- data.frame(x = c(1,2,3), 
        y = c(2,3,4)) 
df1 
# x y 
# 2 2 3 
# 3 3 4 

df2 <- data.frame(x = c(2,3,1,3), 
        y = c(3,1,4,1)) 
df2 
# x y 
# 1 2 3 
# 2 3 1 
# 3 1 4 
# 4 3 1 

# using merge 
merge(df1, df2, by = c("x", "y")) 
# x y 
# 1 2 3 

# using %in% 
df1[(df1$x %in% df2$x) & (df1$y %in% df2$y), ] 
# x y 
# 2 2 3 
# 3 3 4