我想通过仅保留包含维度或包含指标而非渗透的项目来过滤列表
我可以过滤那些包含维度或度量和渗透的内容,但我看不出如何将第二种情况的逻辑转换为公制而不是渗透
以下示例:
> library(stringr)
> var_list <- c("other", "dimension_1", "dimension_2", "metric_1", "metric_2", "metric_3_penetration")
> str_detect(var_list, "dimension|(?=.*metric)(?=.*penetration)")
[1] FALSE TRUE TRUE FALSE FALSE TRUE
我想从str_detect
返回的结果如下:
[1] FALSE TRUE TRUE TRUE TRUE FALSE
答案 0 :(得分:1)
对于第二种情况,您可以使用负面和正面前瞻的组合:
> library(stringr)
> var_list <- c("other", "dimension_1", "dimension_2", "metric_1", "metric_2", "metric_3_penetration")
> str_detect(var_list, "dimension|^(?=.*metric)(?!.*penetration)")
[1] FALSE TRUE TRUE TRUE TRUE FALSE
^(?=.*metric)(?!.*penetration)
正则表达式在字符串metric
且没有penetration
时匹配。
要仅检查整个字词,请添加(?:\b|_)
边界:
str_detect(var_list, "dimension|^(?=.*(?:\\b|_)metric(?:\\b|_))(?!.*(?:\\b|_)penetration(?:\\b|_))")
答案 1 :(得分:1)
grepl
调用的逻辑组合很简单,不涉及任何包:
grepl("dimension",var_list) | (grepl("metric",var_list) & !grepl("penetration",var_list))
## [1] FALSE TRUE TRUE TRUE TRUE FALSE