2016-06-13 98 views
0

我有兩個數據,我想通過這兩個識別變量合併(並ver_u):爲什麼在%中使用合併和%有什麼區別?

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 

我想要做的就是拿出DF2的一個子集,他們的向上和ver_u比賽與那些在df1。我以兩種不同的方式做到了這一點,並得到了不同的答案。

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

他們給了我不同的若干意見,我不明白爲什麼他們給我一個區別:

第一種方法:

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

第二種方法。

當我使用下面的代碼在數據幀測試上使用合併時,我得到了相同數量的觀察值,但是我得到的兩個結果數據幀仍然不同。

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

在%中使用合併和%有一些系統差異嗎?

非常感謝任何有關這方面的見解。

回答

4

因爲merge正在逐列比較兩個列,而%in%正在比較一行的所有其他行。例如:

#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