2016-06-13 67 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