data.frame Выбрать столбцы с условием - PullRequest
0 голосов
/ 18 марта 2020

У меня есть 2 вопроса, но они очень похожи:

1) У меня есть фрейм данных: test<-data.frame(NAT1=1,NAT2=2,NAT3=3,NAT_S1=4,NAT_S2=5):

  NAT1 NAT2 NAT3 NAT_S1 NAT_S2
1    1    2    3      4      5

Я хочу выбрать столбец, имена которого начинаются с NAT и заканчивается числом:

  NAT1 NAT2 NAT3 
1    1    2    3   

2) То же самое, что я хочу сделать с символами: colnames(test) Я хочу оставить только: [1] "NAT1" "NAT2" "NAT3"

Я полагаю, что есть функция могла сделай это. Спасибо за вашу помощь

Ответы [ 2 ]

2 голосов
/ 18 марта 2020
test[, grepl("^NAT\\d$", names(test))]
  NAT1 NAT2 NAT3
1    1    2    3

Если после NAT имеется более 1 числа, вы можете использовать квантификатор + или, если вы хотите выбрать определенное количество чисел или определенный диапазон чисел, квантификацию с помощью { } :

test[, grepl("^NAT\\d+$", names(test))] # matches one or more numbers
test[, grepl("^NAT\\d{2}$", names(test))] # matches exactly 2 numbers
test[, grepl("^NAT\\d{2,4}$", names(test))] # matches the range of 2 to 4 numbers
test[, grepl("^NAT\\d{2,}$", names(test))] # matches the range of 2 to any number of numbers

Также вы можете использовать str_detect из пакета stringr:

test[, str_detect(colnames(test), "^NAT\\d$")]
  NAT1 NAT2 NAT3
1    1    2    3
0 голосов
/ 18 марта 2020

С dplyr мы можем использовать matches

library(dplyr)
test %>%
   select(matches("^NAT.*\\d+$"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...