r - 让 dplyr 中的 select 使用多个模式来匹配

标签 r regex dplyr

我的目标是从 mydata 中选择包含特定模式的几列。

mydata <- data.frame(q1 = rnorm(10), q10 = rnorm(10), q12 = rnorm(10), q20 = rnorm(10))

方法 1 - 使用 grep - 以简约的方式完成我需要的事情:

myvars <- names(mydata)[grep("^q10|^q12", names(mydata))]
temp <- mydata[myvars]
tbl_df(temp)

我正在尝试纯粹用 dplyr 来做这件事。然而,我没有发现任何比以下更节俭的东西(比如在 grep 中):

temp <- cbind(select(mydata, starts_with("q10")), select(mydata, starts_with("q12")))
tbl_df(temp)

代码太多了。我怎样才能让它与“|”一起工作?我尝试了以下方法,但没有一个起作用:

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")))

建议? 谢谢!

最佳答案

select() 帮助文件中,我发现唯一接受正则表达式的特殊内部函数是 matches()。您可以使用正则表达式 ^q1(0|2) 从名称开头开始,并将 q102 以下。

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

关于r - 让 dplyr 中的 select 使用多个模式来匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32402535/

相关文章:

javascript - 用于检查文本日期格式的正则表达式未按预期工作

c# - 简单的C#正则表达式

java - 哈希集中的正则表达式搜索

r - 使用 geom_text 在 geom_point 中添加过滤后的行名称作为标签(数据集长度错误)

r - 根据第二列求和并有条件地计数

r - R中按组计算

r - 如何从 r 中的列表或向量中删除单个非唯一元素

r - 基于不同变量的交互式加入r

r - 在过滤的每一步打印数据框尺寸

在 R 中重新排列数据帧