2016-06-13 4 views
0

私は私は2つの特定の変数(アップとver_u)を経由してマージしたい2つのデータセットがあります。私がやりたい何なぜmergeと%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 

はどこ彼らのアップと試合ver_u DF2のサブセットを取り出すことですdf1のものと一致する。私は2つの異なる方法でこれを行い、私は異なった答えを得ました。

最初の方法:

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

第二の方法:

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

彼らは私に観測の異なる数を与えているし、彼らは私に違いを与えている理由は、私は表示されません。

次のコードでデータフレームテストでマージを使用したとき、私は同じ数の観測を取得しましたが、得られた2つのデータフレームはまだ異なります。

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

mergeと%in%の使用にはいくつかの系統的な違いがありますか?

これについての洞察は大いにありがたいです。

答えて

4

mergeは両方の列の行を比較しているため、%in%は1行を他のすべての行と比較しているためです。例:

#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 
関連する問題