在dplyr中选择使用多个模式进行匹配

use*_*534 2 regex grep r dplyr

我的目标是从mydata中选择包含某些模式的几个列.

mydata <- data.frame(q1 = rnorm(10), q10 = rnorm(10), q12 = rnorm(10), q20 = rnorm(10))
Run Code Online (Sandbox Code Playgroud)

方法1 - 使用grep - 以简约的方式做我需要的东西:

myvars <- names(mydata)[grep("^q10|^q12", names(mydata))]
temp <- mydata[myvars]
tbl_df(temp)
Run Code Online (Sandbox Code Playgroud)

我试图在dplyr中完全做到这一点.但是,我没有找到任何更多的分析(比如grep)而不是:

temp <- cbind(select(mydata, starts_with("q10")), select(mydata, starts_with("q12")))
tbl_df(temp)
Run Code Online (Sandbox Code Playgroud)

代码太多了.我怎么能用"|"来使它?我尝试了以下但没有一个工作:

select(mydata, starts_with("q10|q12"))
select(mydata, starts_with(c("q10","q12")))
temp <- select(mydata, starts_with("q10","q12"))
select(mydata, starts_with(c("q10"))|starts_with(c("q12")))
Run Code Online (Sandbox Code Playgroud)

建议吗?谢谢!

Ric*_*ven 5

select()帮助文件中,我收集了唯一接受正则表达式的特殊内部函数matches().您可以使用正则表达式^q1(0|2)从名称的开头开始并q1与之匹配0或匹配2.

select(mydata, matches("^q1(0|2)"))
#            q10        q12
# 1  -0.97766671  1.2691732
# 2  -1.17397582 -0.8175758
# 3  -1.98684643  0.1117284
# 4   1.12142980  0.5737528
# 5   0.41680505  0.8974448
# 6   1.47558382 -1.5122752
# 7   0.39651297 -0.5282083
# 8  -0.13266148  0.8281671
# 9  -0.66982395  0.1239249
# 10  0.06119857 -0.3484675
Run Code Online (Sandbox Code Playgroud)