Почему регулярные выражения работают по-разному в dplyr v. Grep () - PullRequest
0 голосов
/ 11 июня 2018

Я хотел бы выбрать несколько переменных из моего фрейма данных и подумал, что могу сделать что-то вроде этого:

var1<-rnorm(10)
var2<-rnorm(10)
var3<-rnorm(10)
var4<-rnorm(10)
df<-data.frame(var1, var2, var3, var4)
library(dplyr)
df %>% 
  select(ends_with('[2-3]'))

Но это ничего не возвращает.Поэтому я сравнил, как это работает с grep (), и это работает нормально.

test<-seq(1,10,1)
grep('[2-3]', test)

Почему ends_with() не реализует регулярное выражение, подобное grep().Чего мне не хватает?Спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете решить проблему, используя matches из tidyselect:

library(dplyr)
df %>% 
  select(matches('[2-3]')) #or '[23]'
#output
          var2        var3
1   1.51178117  0.91897737
2   0.38984324  0.78213630
3  -0.62124058  0.07456498
4  -2.21469989 -1.98935170
5   1.12493092  0.61982575
6  -0.04493361 -0.05612874
7  -0.01619026 -0.15579551
8   0.94383621 -1.47075238
9   0.82122120 -0.47815006
10  0.59390132  0.41794156

совпадений (): соответствует регулярному выражению

всем остальнымselect_helpers использовать буквенные строки.

РЕДАКТИРОВАТЬ: согласно комментарию @James:

Для того, чтобы регулярное выражение собирало только числа в конце переменной, вы должны использоватьвыражение '[2-3]$', где $ обозначает конец строки.

df %>% 
  select(matches('[2-3]$'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...