Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在使用merge和%in%时存在差异?_R_Merge_Subset - Fatal编程技术网

为什么在使用merge和%in%时存在差异?

为什么在使用merge和%in%时存在差异?,r,merge,subset,R,Merge,Subset,我有两个数据集,我想通过两个识别变量(up和ver_)进行合并: 我想做的是取出df2的一个子集,其中的up和ver_与df1中的匹配。我用了两种不同的方法,得到了不同的答案 第一种方法: pur <- merge(df2, df1,by=c("up","ver_u")) 使用merge和%in%是否存在系统性差异 如果您能对此有所了解,将不胜感激。因为merge正在逐行比较两列,而%中的%正在将一行与所有其他行进行比较。例如: #dummy data df1 <- data.fr

我有两个数据集,我想通过两个识别变量(up和ver_)进行合并:

我想做的是取出df2的一个子集,其中的up和ver_与df1中的匹配。我用了两种不同的方法,得到了不同的答案

第一种方法:

pur <- merge(df2, df1,by=c("up","ver_u"))
使用merge和%in%是否存在系统性差异


如果您能对此有所了解,将不胜感激。

因为
merge
正在逐行比较两列,而%中的
%正在将一行与所有其他行进行比较。例如:

#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
#虚拟数据

df1是因为
merge
对两列进行逐行比较,而%
中的
%对一行与所有其他行进行比较。例如:

#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
#虚拟数据
df1
pur1 = merge(test, df1,by=c("up","ver_u"))
#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