glob2rx()
преобразует шаблон, включающий подстановочный знак, в эквивалентное регулярное выражение.Затем вам нужно передать это регулярное выражение в один из инструментов сопоставления с образцом R.
Если вы хотите сопоставить "blue*"
, где *
имеет обычный подстановочный знак, не регулярное выражение, что означаетмы используем glob2rx()
для преобразования шаблона с подстановочными знаками в полезное регулярное выражение:
> glob2rx("blue*")
[1] "^blue"
Возвращенный объект является регулярным выражением.
С учетом ваших данных:
x <- c('red','blue1','blue2', 'red2')
мы можем сопоставить шаблон, используя grep()
или аналогичные инструменты:
> grx <- glob2rx("blue*")
> grep(grx, x)
[1] 2 3
> grep(grx, x, value = TRUE)
[1] "blue1" "blue2"
> grepl(grx, x)
[1] FALSE TRUE TRUE FALSE
Что касается проблемы выбора строк, которую вы отправили
> a <- data.frame(x = c('red','blue1','blue2', 'red2'))
> with(a, a[grepl(grx, x), ])
[1] blue1 blue2
Levels: blue1 blue2 red red2
> with(a, a[grep(grx, x), ])
[1] blue1 blue2
Levels: blue1 blue2 red red2
или через subset()
:
> with(a, subset(a, subset = grepl(grx, x)))
x
2 blue1
3 blue2
Надеюсь, это объясняет, что делает grob2rx()
и как его использовать?