[英]Partial String Match in R using the %in% operator?
我很想知道是否可以使用R中的%in%運算符進行部分字符串匹配。我知道有很多方法可以使用stringr等來查找部分字符串匹配,但是我當前的代碼使用起來更容易%in%運算符。
例如,假設此向量:
x <- c("Withdrawn", "withdrawn", "5-Withdrawn", "2-WITHDRAWN", "withdrawnn")
我希望每個都是TRUE,因為字符串包含“ Withdrawn”,但是只有第一個是TRUE:
x %in% c("Withdrawn")
[1] TRUE FALSE FALSE FALSE FALSE
我嘗試使用正則表達式至少使它不區分大小寫,但這使所有內容都不正確:
x %in% c("(?i)Withdrawn")
[1] FALSE FALSE FALSE FALSE FALSE
因此,是否可以使用%in%運算符(可能帶有包裝器)在所有這些元素上得出TRUE? 因為它很容易tolower的()或TOUPPER(),我並不關心大小寫區分使用; 但是,對我來說重要的是,代碼將觸發“撤回”,“撤回”和“ 5撤回”。
編輯:該問題被標記為該問題的重復項; R中列表的大小寫不敏感搜索 ; 但是,它有所不同,因為它詢問是否可以使用%in%運算符來匹配部分字符串。 鏈接的問題根本不使用%in%運算符。
%in%
不支持此功能:它是match
函數的包裝器,它使用相等比較建立匹配,而不是正則表達式匹配。 但是,您可以實現自己的:
`%rin%` = function (pattern, list) {
vapply(pattern, function (p) any(grepl(p, list)), logical(1L), USE.NAMES = FALSE)
}
可以像%in%
這樣使用:
〉'^foo.*' %rin% c('foo', 'foobar')
[1] TRUE
請注意,結果與您對grepl
期望的工作要求有所不同:模式匹配是不對稱的 ,您不能互換左右兩側。 如果只想將列表與單個正則表達式匹配, grepl
直接使用grepl
:
〉grepl("(?i)Withdrawn", x)
[1] TRUE TRUE TRUE TRUE TRUE
或者,如果您更喜歡使用運算符:
`%matches%` = grepl
〉"(?i)Withdrawn" %matches% x
[1] TRUE TRUE TRUE TRUE TRUE
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.