Как использовать функцию grep для разделения нескольких столбцов с общим именем в R? - PullRequest
2 голосов
/ 19 февраля 2020

Для следующего набора данных я бы хотел разделить столбцы только с beta1.

mydata
         beta1_C1 beta2_C2 beta1_C2 beta2_C1 beta3_C1 beta4_C2 beta4_C1 beta21_C1 beta21_C2 beta10_C1
    [1,]        1        9       17       25       33       41       49        57        65        73
    [2,]        2       10       18       26       34       42       50        58        66        74
    [3,]        3       11       19       27       35       43       51        59        67        75
    [4,]        4       12       20       28       36       44       52        60        68        76
    [5,]        5       13       21       29       37       45       53        61        69        77
    [6,]        6       14       22       30       38       46       54        62        70        78
    [7,]        7       15       23       31       39       47       55        63        71        79
    [8,]        8       16       24       32       40       48       56        64        72        80

Я использую следующий код, но в выводе отображается beta10, который мне не нужен. В моих ожидаемых данных у меня должно быть только beta1_C1 и beta1_C2 столбцов.

 dat1=mydata[,grep("beta1",colnames(mydata))]
 dat1
         beta1_C1 beta1_C2 beta10_C1
    [1,]        1       17        73
    [2,]        2       18        74
    [3,]        3       19        75
    [4,]        4       20        76
    [5,]        5       21        77
    [6,]        6       22        78
    [7,]        7       23        79
    [8,]        8       24        80

Любая помощь приветствуется.

Ответы [ 3 ]

3 голосов
/ 19 февраля 2020

Если вы просто добавите подчеркивание (_) в свой текущий шаблон, это решит проблему с данными, которые будут использоваться совместно.

mydata[,grep("beta1_",colnames(mydata))]

Однако, чтобы быть более точным c, вы можете сделать

mydata[,grep("^beta1_C\\d+",colnames(mydata))]

. Это позволит выбрать столбцы, которые начинаются с "beta1_ C", за которым следует число.

2 голосов
/ 19 февраля 2020

В data.table вы можете использовать patterns() с .SDcols.

library(data.table)
setDT(mydata)[, .SD, .SDcols = patterns("^beta1_")]
1 голос
/ 19 февраля 2020

Мы можем использовать tidyverse

library(dplyr)
mydata %>%
      select(starts_with('beta1_C'))

Или с matches

mydata %>%
     select(matches('^beta1_C\\d+'))
...