我想知道列中是否出现特定单词。它可以是任何大写,也可以是开头或结尾或中间。我该怎么做呢?我试着查看正则表达式和grep(),但我遇到了困难。
例如下面我有一个值列和我想要的指示响应。我想检查“狗”这个词。我想要一个“1”如果“狗”被发现有任何尾随的茎,如“狗狗”或“狗狗”,但如果“狗”先于其他东西,我不想要“1”。
mydf = structure(list(values = structure(c(7L, 4L, 1L, 2L, 3L, 9L, 8L,
5L, 6L), .Label = c("1 dog", "2 dog 3", "cats and dogs", "dog",
"DOG", "DOGG", "doggy", "no notthisdog", "not a valid value"), class = "factor"),
result = c(1, 1, 1, 1, 1, 0, 0, 1, 1)), .Names = c("values",
"result"), row.names = c(NA, -9L), class = "data.frame")
答案 0 :(得分:3)
正则表达式\b
匹配单词边界(单词的开头或结尾,非捕获),因此\bdog
(不区分大小写,已转义)匹配“狗”#39;在一个单词的开头。如果您需要更多用例,则需要指定它们。
mfdf$regex <- as.numeric(grepl("\\bdog", mydf$values, ignore.case=TRUE))
mydf
## values result regex
## 1 doggy 1 1
## 2 dog 1 1
## 3 1 dog 1 1
## 4 2 dog 3 1 1
## 5 cats and dogs 1 1
## 6 not a valid value 0 0
## 7 no notthisdog 0 0
## 8 DOG 1 1
## 9 DOGG 1 1
答案 1 :(得分:0)
as.integer(grepl('\\bdog',mydf$values,ignore.case=T));
## [1] 1 1 1 1 1 0 0 1 1
或者如果你想要价值本身:
grep(value=T,'\\bdog',mydf$values,ignore.case=T);
## [1] "doggy" "dog" "1 dog" "2 dog 3" "cats and dogs" "DOG" "DOGG"