示例数据
v1 <- c("E82391", "X2329323", "C239923", "E1211", "N23932", "F93249232", "X93201", "X9023111", "O92311", "9000F", "K9232932", "L9232932", "X02311111")
v2 <- c("L9232932", "C239923", "E1211", "E82391", "F93249232", "U82832")
问题
我想只提取其中一个向量而不在另一个向量中的项目。
我理解setdiff
无法比较两个无序的字符向量,并找出两者之间的所有差异。
例如,%in%
是否执行两个字符向量之间的所有比较?
在这种情况下,它确实有效(尽管它不会报告v2
而不是v1
中的那些元素。)
> v1[!v1 %in% v2]
[1] "X2329323" "N23932" "X93201" "X9023111" "O92311" "9000F" "K9232932" "X02311111"
另一种方法是使用名为outersect
的用户定义函数作为shown here来显示所有差异。
outersect <- function(x, y) {
sort(c(x[!x%in%y],
y[!y%in%x]))
}
outersect(v1,v2)
问题
我真的很想知道是否有任何R函数可以轻松执行两个字符向量之间的全部比较!我们的想法是真正提高代码的可读性(特别是当需要相互比较的数十个向量时)。
执行此类全面比较的最安全,最有效的方法是什么?更具体地说,R中是否有一个函数
参考。
答案 0 :(得分:0)
这个怎么样......
setdiff(union(v1,v2),intersect(v1,v2))
[1] "X2329323" "N23932" "X93201" "X9023111" "O92311" "9000F"
"K9232932" "X02311111" "U82832"
答案 1 :(得分:0)
也许这个:
both <- c(unique(v1),unique(v2))
both[! (duplicated(both) | duplicated(both, fromLast = T))]
[1] "X2329323" "N23932" "X93201" "X9023111" "O92311" "9000F" "K9232932" "X02311111" "U82832"