2017-04-10 23 views
0

選擇列我有以下tibble:如何基於grep的在dplyr :: tibble

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

,看起來像這樣:

> df 
# A tibble: 10 × 5 
    gene x1.control x2.control y1.control y2.control 
    <chr>  <dbl>  <dbl>  <dbl>  <dbl> 
1  A 0.26550866 0.2059746 0.93470523 0.4820801 
2  B 0.37212390 0.1765568 0.21214252 0.5995658 
3  C 0.57285336 0.6870228 0.65167377 0.4935413 
4  D 0.90820779 0.3841037 0.12555510 0.1862176 
5  E 0.20168193 0.7698414 0.26722067 0.8273733 
6  F 0.89838968 0.4976992 0.38611409 0.6684667 
7  G 0.94467527 0.7176185 0.01339033 0.7942399 
8  H 0.66079779 0.9919061 0.38238796 0.1079436 
9  I 0.62911404 0.3800352 0.86969085 0.7237109 
10  J 0.06178627 0.7774452 0.34034900 0.4112744 

給出一個字符串如

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 

我該怎麼用grep和tidyverse做到這一點?

+4

你的榜樣'wanted_col_pat'也將匹配'y1.control'和'y2.control'? – neilfws

+2

'df%>%select(包含('control'))'或'matches'用於非文字正則表達式,或者'ends_with'用於限制性較強的文字版本。 – alistaire

+0

@neilfws你說得對。是的,它會的。 – neversaint

回答

4

您可以使用dplyr::select_ifgrepl。例如,以匹配列名稱包含「控制」的所有列:

library(dplyr) 
df %>% 
    select_if(grepl("control", names(.))) 
+0

也包含()'等等,根據alistaire的評論 – neilfws