如何解决R中多个元素的部分字符串匹配
是否可以将包含多个元素的字符串与另一个包含多个元素的字符串部分匹配并返回 TRUE
或 FALSE
而不是向量?
Grepl()
可以计算字符串的一个元素,例如:
dat <- data.frame(x="1",y= "1 2 3")
>grepl(dat$x,dat$y)
[1] TRUE
但是当有多个元素时,我似乎找不到可以得到单个 TRUE
或 FALSE
评估的解决方案。我从不同的问题中应用了@r2evans 的相同解决方案:
dat <- data.frame(x="1 2",y= "1 6 7 8")
> mapply(`%in%`,strsplit(dat$x,"\\D+"),strsplit(dat$y,"\\D+"))
[,1]
[1,] TRUE
[2,] FALSE
但在这种情况下(如果我理解正确的话),它正在评估 dat$x
中的每个元素并为每个元素返回 TRUE
或 FALSE
。这就是我想要的,但只返回单个 TRUE
或 FALSE
语句,这样如果 dat$x
中的任何或所有元素都存在于 dat$y
中,则返回 {{ 1}} 或 TRUE
和 FALSE
如果 FALSE
中不存在,如下所示:
dat$y
我尝试使用 dat <- data.frame(x=c("1 2","3 6 7","8 5"),y=c("1 6 7 8","2 9 10","8 5 3"),result=c(TRUE,FALSE,TRUE))
x y result
1 1 2 1 6 7 8 TRUE #Where 1 is present in y (partial)
2 3 6 7 2 9 10 FALSE #Where none is present
3 8 5 8 5 3 TRUE #where both 8 and 5 are present (full)
和 paste0
,但我认为我的语法不正确,因为第一行计算应该是 collapse='|'
。
TRUE
任何澄清将不胜感激!
解决方法
您可以在 any
中使用 mapply
返回单个 TRUE
或 FALSE
值。如果字符串中有 0 个以上的匹配项,则使用 any
将返回 TRUE
。
mapply(function(x,y) any(x %in% y),strsplit(dat$x,"\\s+"),strsplit(dat$y,"\\s+"))
#[1] TRUE FALSE TRUE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。