我的目标是从 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)
从名称开头开始,并将 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
关于r - 让 dplyr 中的 select 使用多个模式来匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32402535/