gpt4 book ai didi

R:setdiff 的非贪婪版本?

转载 作者:行者123 更新时间:2023-12-04 11:06:09 24 4
gpt4 key购买 nike

这是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"

……但如果我想要怎么办 y只取出一次,因此得到以下结果?
# "c" "d" "a" "b" "c" "d"
我猜想使用 setdiff 有一个简单的解决方案。或 %in% ,但我就是看不到它。

最佳答案

match在其第二个参数中返回其第一个参数的(第一个)匹配项的位置向量。它用作索引构造函数:

x[ -match(y,x) ]
#[1] "c" "d" "a" "b" "c" "d"

如果 '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"

这将是使用下面建议的表格方法的一种可能结果。使用一些“设置”函数,但这并不是真正的设置问题。似乎更“矢量化”:
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

关于R:setdiff 的非贪婪版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41531485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com