鉴于以下列表:
list <- c("Horse Cat - Dog - Snake/Cow", "Monkey Chicken - Horse - Donkey/Cow", "Fish Rat - Tortoise - Worm/Bird", "Bat Lizard - Ox - Snake/Cow",
"Dog Cat - Horse - Snake/Cow")
找到马和牛都存在于同一个字符串中的位置的最佳方法是什么?
尝试:grepl("Horse & Cow", list)
给了我:[1] FALSE FALSE FALSE FALSE FALSE
如何编写返回[1] TRUE TRUE FALSE FALSE TRUE
?
答案 0 :(得分:3)
您可以尝试使用正则表达式实现此功能,这似乎可行
grepl("Horse.*?Cow|Cow.*?Horse", list)
## [1] TRUE TRUE FALSE FALSE TRUE
如果您想忽略案例,可以添加ignore.case = TRUE
顺便说一句,如果你想要这些地点,最好使用grep
而不是
grep("Horse.*?Cow|Cow.*?Horse", list)
## [1] 1 2 5
答案 1 :(得分:3)
最简单的方法就是使用两个grepl
并与&
R> grepl("Horse", list) & grepl("Cow", list)
[1] TRUE TRUE FALSE FALSE TRUE
自
R> grepl("Horse", list)
[1] TRUE TRUE FALSE FALSE TRUE
R> grepl("Cow", list)
[1] TRUE TRUE FALSE TRUE TRUE
或者,您可以使用单个grepl
命令:
grepl("Cow.*Horse|Horse.*Cow", list)
答案 2 :(得分:1)
要返回逻辑向量,您可以使用:
grepl("Horse", list) & grepl("Cow", list)
要返回索引,请将上述语句包装在which()
答案 3 :(得分:1)
另一种可能性:
grepl("^(?=.*\\bHorse\\b)(?=.*\\bCow\\b)", list, perl=TRUE)
## [1] TRUE TRUE FALSE FALSE TRUE
虽然:
grepl("^(?=.*\\bhorse\\b)(?=.*\\bcow\\b)", list, ignore.case=TRUE, perl=TRUE)
案件可能有所不同,可能更有用。