这是x \ y使用数学符号.假设
x <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,1,1,3)
y <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1)
Run Code Online (Sandbox Code Playgroud)
如何获得一个包含x中所有不在yie中的值的向量,结果应为:
2,1,1,3
Run Code Online (Sandbox Code Playgroud)
还有一个类似的问题在这里.但是,没有一个答案返回我想要的结果.
这里有一个解决方案pmatch(这可以根据需要提供"补充"):
x <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,1,1,3)
y <- c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1)
res <- x[is.na(pmatch(x,y))]
Run Code Online (Sandbox Code Playgroud)
来自pmatch文档:
"如果duplicates.ok为FALSE,则一旦匹配的表的值将从搜索后续匹配中排除."
这个怎么样:
R> x[x!=y]
[1] 2 1 1 1 3
Warning message:
In x != y : longer object length is not a multiple of shorter object length
R>
Run Code Online (Sandbox Code Playgroud)
我认为这是一个难题,因为您正在混合使用值和头寸。更简单的解决方案依赖于R中的“设置”功能之一:
R> setdiff(x,y)
[1] 2 3
Run Code Online (Sandbox Code Playgroud)
但这仅使用值而不使用位置。
我给您的答案的问题是回收的隐式使用及其引发的警告:由于您x的时间长于您的时间y,因此y获取的前几个值会被重用。但是,当较长的向量具有较短向量的长度的整数倍长度时,回收被认为是“干净的”。但这不是这里的情况,因此我不确定我们能否彻底解决您的问题。