R语言 两个向量的区别
在这篇文章中,我们将看到如何在R编程语言中找到两个向量之间的差异。
在R编程中,两个向量之间的差值 (A-B) 相当于A中存在而B中不存在的元素,结果元素总是A的一个子集。
方法1:使用setdiff()方法
R中的setdiff()方法用于检索矢量X中不包含在Y中的元素。这个方法可以应用于两个矢量可能属于不同的数据类型,以及第一个参数矢量的元素未经修改就被返回。如果输入向量是等价的,也就是说,它们包含相同的元素,那么结果向量将有空条目,并由datatype(0)输出来表示。另外,在函数调用过程中,改变向量的顺序会得到不同类型的结果。
语法
setdiff( X, Y)
例子
# declaring first integer vector
vec1 <- c(1:5)
# declaring second string vector
vec2 <- c(4:8)
print ("Original vector1 ")
print (vec1)
print ("Original vector2 ")
print (vec2)
# computing the difference
# in vectors
diff <- setdiff(vec1,vec2)
print ("Vec1- Vec2")
print (diff)
输出
[1] "Original vector1 "
[1] 1 2 3 4 5
[1] "Original vector2 "
[1] 4 5 6 7 8
[1] "Vec1- Vec2"
[1] 1 2 3
这种方法对字符串向量也适用。
例子
# declaring first integer vector
vec1 <- c("Geeksforgeeks","Interviews","Science")
# declaring second string vector
vec2 <- c("Algorithms","Science",
"placements","data structures")
print ("Original vector1 ")
print (vec1)
print ("Original vector2 ")
print (vec2)
# computing the difference in
# vectors
diff <- setdiff(vec2,vec1)
print ("Vec2 - Vec1")
print (diff)
输出
[1] "Original vector1 "
[1] 1 2 3 4 5
[1] "Original vector2 "
[1] 4 5 6 7 8
[1] "Vec1- Vec2"
[1] 1 2 3
另外,这个方法自动返回结果向量的唯一元素。任何重复的元素都会被删除。
例子
# declaring first integer vector
vec1 <- c("Geeksforgeeks","Interviews","Science")
# declaring second string vector
vec2 <- c(1,2,3,5,5)
print ("Original vector1 ")
print (vec1)
print ("Original vector2 ")
print (vec2)
# computing the difference in vectors
diff <- setdiff(vec2,vec1)
print ("Vec2 - Vec1")
print (diff)
输出
[1] "Original vector1 "
[1] "Geeksforgeeks" "Interviews" "Science"
[1] "Original vector2 "
[1] 1 2 3 5 5
[1] "Vec2 - Vec1"
[1] 1 2 3 5
方法2:使用%in%操作符
可以使用%in%运算符来检查列表中是否有元素。这种方法首先检查向量1的哪些索引不在向量2中,然后返回向量1的相应元素。随后应用unique()方法,只返回结果向量中的唯一元素。
语法
vec1[! vec1 %in% vec2]
例子
# declaring first integer vector
vec1 <- c("Geeksforgeeks","Interviews","Science")
# declaring second string vector
vec2 <- c("Algorithms","Science",
"placements","data structures")
print ("Original vector1 ")
print (vec1)
print ("Original vector2 ")
print (vec2)
# computing the difference in vectors
diff <- unique(vec1[! vec1 %in% vec2])
print ("Vec1 - Vec2")
print (diff)
输出
[1] “Original vector1 “
[1] “Geeksforgeeks” “Interviews” “Science”
[1] “Original vector2 “
[1] “Algorithms” “Science” “placements” “data structures”
[1] “Vec1 – Vec2”
[1] “Geeksforgeeks” “Interviews”
这种方法也适用于属于不同数据类型的向量。在这种情况下,将返回vec1的元素。
例子
# declaring first integer vector
vec1 <- c("Geeksforgeeks","Interviews","Science")
# declaring second string vector
vec2 <- c(1,2,3,5,5)
print ("Original vector1 ")
print (vec1)
print ("Original vector2 ")
print (vec2)
# computing the difference in vectors
diff <- unique(vec2[! vec2 %in% vec1])
print ("Vec2 - Vec1")
print (diff)
输出
[1] "Original vector1 "
[1] "Geeksforgeeks" "Interviews" "Science"
[1] "Original vector2 "
[1] 1 2 3 5 5
[1] "Vec2 - Vec1"
[1] 1 2 3 5
方法3:使用intersect方法
Base R中的intersect()方法是用来计算指定参数向量中元素的交集。它返回一个包含两个输入向量中所有元素的向量数组。这个方法包括两个步骤,首先,intersect()方法返回相交数组。接下来,是应用%in%运算符的否定来获得第一个向量中不存在于相交处的元素。返回的元素将只包含在第一个向量中。
举个例子 。
# declaring first integer vector
vec1 <- c(1:5)
# declaring second string vector
vec2 <- c(4:8)
print ("Original vector1 ")
print (vec1)
print ("Original vector2 ")
print (vec2)
# computing the intersection of two
# vectors
intersect <- intersect(vec1,vec2)
# getting elements of vec1 not in
# intersection
diff <- vec1[!(vec1 %in% intersect)]
print ("Elements of vec1 not in vec2")
print(diff)
输出
[1] "Original vector1 "
[1] 1 2 3 4 5
[1] "Original vector2 "
[1] 4 5 6 7 8
[1] "Elements of vec1 not in vec2"
[1] 1 2 3