如何在dplyr::tibble中基于grep选择列

如何在dplyr::tibble中基于grep选择列,r,dplyr,R,Dplyr,我有以下几点: library(tidyverse) set.seed(1) df <- data_frame(gene=LETTERS[seq( from = 1, to = 10 )], x1.control=runif(10),x2.control=runif(10),y1.control=runif(10),y2.control=runif(10)) 我想获取包含该字符串的列: # A tibble: 10 × 2 x1.control x2.control

我有以下几点:

library(tidyverse)
set.seed(1)
df <- data_frame(gene=LETTERS[seq( from = 1, to = 10 )], x1.control=runif(10),x2.control=runif(10),y1.control=runif(10),y2.control=runif(10))
我想获取包含该字符串的列:

# A tibble: 10 × 2
   x1.control x2.control
        <dbl>      <dbl>
1  0.26550866  0.2059746
2  0.37212390  0.1765568
3  0.57285336  0.6870228
4  0.90820779  0.3841037
5  0.20168193  0.7698414
6  0.89838968  0.4976992
7  0.94467527  0.7176185
8  0.66079779  0.9919061
9  0.62911404  0.3800352
10 0.06178627  0.7774452
#一个tible:10×2
x1.控制x2.控制
1  0.26550866  0.2059746
2  0.37212390  0.1765568
3  0.57285336  0.6870228
4  0.90820779  0.3841037
5  0.20168193  0.7698414
6  0.89838968  0.4976992
7  0.94467527  0.7176185
8  0.66079779  0.9919061
9  0.62911404  0.3800352
10 0.06178627  0.7774452

如何使用grep和tidyverse实现这一点?

您可以使用
dplyr::select_if
grepl
。例如,要匹配列名包含“control”的所有列,请执行以下操作:


您可以使用
dplyr::select_if
grepl
。例如,要匹配列名包含“control”的所有列,请执行以下操作:


您的示例
通缉\u col\u pat
也将匹配
y1.control
y2.control
df%>%select(contains('control'))
匹配
非文字正则表达式,或
结束\u,以更严格的文字版本在此处工作。@neilfws您说得对。是的。请尝试
df%>%select(匹配(粘贴0(“x”),“\\d+\\\”,通缉犯身份证))
您的示例
通缉犯身份证身份证也将匹配
y1.control
y2.control
df%>%select(包含('control'))
匹配非文字正则表达式的
,或者
结尾,以获得一个更严格的文本版本,在这里可以使用。@neilfws你说得对。是的。请尝试
df%>%选择(匹配(粘贴0(“x”),“\\d+\\\\”,通缉\u col\u pat))
包含()
等。根据alistaire的评论也
包含()
等。根据alistaire的评论
wanted_col_pat = 'control'
# A tibble: 10 × 2
   x1.control x2.control
        <dbl>      <dbl>
1  0.26550866  0.2059746
2  0.37212390  0.1765568
3  0.57285336  0.6870228
4  0.90820779  0.3841037
5  0.20168193  0.7698414
6  0.89838968  0.4976992
7  0.94467527  0.7176185
8  0.66079779  0.9919061
9  0.62911404  0.3800352
10 0.06178627  0.7774452
library(dplyr)
df %>%
  select_if(grepl("control", names(.)))