Хотя мне и нравится ответ выше, я хотел бы также дать решение "tidyverse". Если вы делаете много трубок и пытаетесь сделать несколько вещей одновременно, как я часто делаю, вам может понравиться этот ответ. Кроме того, я нахожу этот код более "по-человечески" читаемым.
Функция dplyr select_vars
будет выбирать переменные из символьного вектора в первом аргументе, который должен содержать имена соответствующего фрейма данных, на основе вспомогательной функции выбора, такой как starts_with
или matches
library(dplyr)
df <- data.frame(a1 = factor(c("Hi", "Med", "Hi", "Low"),
levels = c("Low", "Med", "Hi"), ordered = TRUE),
a2 = c("A", "D", "A", "C"), a3 = c(8, 3, 9, 9),
b1 = c(1, 1, 1, 2), b2 = c( 5, 4, 3,2), b3 = c(3, 4, 3, 4),
B1 = c(3, 6, 4, 4))
#will select the names starting with a "b" or a "B"
select_vars(names(df), starts_with('b', ignore.case = TRUE))
#use select in conjunction with the previous code
df %>%
select(select_vars(names(df), starts_with('b', ignore.case = TRUE)))
#Alternatively
select_vars(names(df), matches('^[Bb]'))
Обратите внимание, что по умолчанию для ignore.case
установлено значение TRUE
, но я привел его здесь, чтобы показать явно, и в случае, если будущие читатели будут любопытно, как настроить код. Также можно использовать аргументы include
и exclude
, которые также очень полезны. Например, вы можете использовать select_vars(names(df), matches('^[Bb]'), include = 'a1')
, если вы хотите, чтобы все начиналось с «B» или «b», и вы хотели также включить «a1».