gpt4 book ai didi

R:按 'two-way' 部分匹配过滤向量

转载 作者:行者123 更新时间:2023-12-05 00:48:14 24 4
gpt4 key购买 nike

有两个向量

x <- c("abc", "12")
y <- c("bc", "123", "nomatch")

有没有办法通过“双向”部分匹配对两者进行过滤(删除一个向量中的元素,如果它们包含或包含在另一个向量中的任何元素中),以便结果是这两个向量:
x1 <- c()
y1 <- c("nomatch")

解释一下 - x 的每个元素都是 y 元素之一的子字符串或超字符串,因此 x1 是空的。更新 - 子字符串匹配初始字符是不够的 - 子字符串可能会在它匹配的字符串中的任何地方找到。上面的示例已更新以反射(reflect)这一点。

最佳答案

原本以为?pmatch可能很方便,但您的编辑表明您不只是想匹配项目的开头。这是一个应该可以工作的函数:

remover <- function(x,y) {
pmx <- sapply(x, grep, x=y)
pmy <- sapply(y, grep, x=x)

hit <- unlist(c(pmx,pmy))

list(
x[!(seq_along(x) %in% hit)],
y[!(seq_along(y) %in% hit)]
)
}

remover(x,y)
#[[1]]
#character(0)
#
#[[2]]
#[1] "nomatch"

当找不到匹配项时,它正确地不执行任何操作(感谢 @Frank 找出较早的错误):
remover("yo","nomatch")
#[[1]]
#[1] "yo"
#
#[[2]]
#[1] "nomatch"

关于R:按 'two-way' 部分匹配过滤向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49992830/

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