这是setdiff正常的行为:
x <- rep(letters[1:4], 2)
x
# [1] "a" "b" "c" "d" "a" "b" "c" "d"
y <- letters[1:2]
y
# [1] "a" "b"
setdiff(x, y)
# [1] "c" "d"
Run Code Online (Sandbox Code Playgroud)
...但是如果我只想y取出一次,那么得到以下结果呢?
# "c" "d" "a" "b" "c" "d"
我猜,有使用任何一种简单的解决方案setdiff还是%in%,但我就是不能看到它.
match返回第二个参数的第一个参数(第一个)匹配位置的向量.它用作索引构造函数:
x[ -match(y,x) ]
#[1] "c" "d" "a" "b" "c" "d"
Run Code Online (Sandbox Code Playgroud)
如果'y'中有重复项并且你想要与其中的数字成比例地删除,那么我想到的第一件事就是for循环:
y <- c("a","b","a")
x2 <- x
for( i in seq_along(y) ){ x2 <- x2[-match(y[i],x2)] }
> x2
[1] "c" "d" "b" "c" "d"
Run Code Online (Sandbox Code Playgroud)
这将是使用下面建议的制表方法的一种可能结果.使用一些"set"函数,但这不是一个确定的问题.似乎有点"矢量化":
c( table(x [x %in% intersect(x,y)]) - table(y[y %in% intersect(x,y)]) ,
table( x[!x %in% intersect(x,y)]) )
a b c d
0 1 2 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |