R - 向量上的 grepl 条件以排除完全匹配
R - grepl conditions on vector to exclude exact match
我在使用 grepl
时很难正确排除变量。
假设我的向量是
vec = c("POP MUSIC", "TOP THE POPS", "POPEYE", "MARY POPPINS")
我想 grepl
POP
当我视觉识别流行音乐时。
在我的示例中,我想排除 "POPEYE", "MARY POPPINS"
。
我怎么能做类似的事情?
为什么这行代码不起作用?
vec[ grepl("POP", vec ) & grepl("^POPEY$", vec ) & grepl("^MARY POPPINS$", vec ) ]
想要的结果
"POP MUSIC" "TOP THE POPS"
谢谢
您可以使用以下grep
解决方案:
vec = c("POP MUSIC", "TOP THE POPS", "POPEYE", "MARY POPPINS")
grep("(?i)\bPOPS?\b", vec, value = TRUE)
正则表达式 (?i)\bPOPS?\b
以不区分大小写的方式匹配整个单词 POP
或 POPS
(由于 (?i)
),如果找到,则返回该值(由于 value=TRUE
)。
您可能需要根据需要调整正则表达式(例如 (?i)\bPOP(S|PING)?\b
也允许 popping
)。
我在使用 grepl
时很难正确排除变量。
假设我的向量是
vec = c("POP MUSIC", "TOP THE POPS", "POPEYE", "MARY POPPINS")
我想 grepl
POP
当我视觉识别流行音乐时。
在我的示例中,我想排除 "POPEYE", "MARY POPPINS"
。
我怎么能做类似的事情? 为什么这行代码不起作用?
vec[ grepl("POP", vec ) & grepl("^POPEY$", vec ) & grepl("^MARY POPPINS$", vec ) ]
想要的结果
"POP MUSIC" "TOP THE POPS"
谢谢
您可以使用以下grep
解决方案:
vec = c("POP MUSIC", "TOP THE POPS", "POPEYE", "MARY POPPINS")
grep("(?i)\bPOPS?\b", vec, value = TRUE)
正则表达式 (?i)\bPOPS?\b
以不区分大小写的方式匹配整个单词 POP
或 POPS
(由于 (?i)
),如果找到,则返回该值(由于 value=TRUE
)。
您可能需要根据需要调整正则表达式(例如 (?i)\bPOP(S|PING)?\b
也允许 popping
)。