Индексирование по имени столбца до конца кадра данных - R - PullRequest
0 голосов
/ 07 мая 2018

Мне интересно, есть ли способ выбрать группу столбцов по имени первого столбца в группе, а затем все последующие столбцы: а) до конца фрейма данных или б) до другого столбец, также используя его имя.

a) Как пример для первого вопроса, в наборе данных mtcars есть ли способ выбрать столбцы от drat до конца фрейма данных? (Что-то вроде mtcars[,'drat':ncol(mtcars)])

б) По второму вопросу, есть ли способ выбрать столбцы, начинающиеся с cyl и заканчивающиеся wt? (Что-то вроде mtcars[,'cyl':'wt'])

Ответы [ 4 ]

0 голосов
/ 07 мая 2018

Многие элегантные решения уже предоставлены, но можно даже использовать base-R, чтобы получить желаемый результат, используя which как:

Ответ:

mtcars[,which(names(mtcars) == "drat"):ncol(mtcars)]

Ответ b:

mtcars[,which(names(mtcars) == "cyl"):which(names(mtcars) == "wt")]
#                    cyl  disp  hp drat    wt
#Mazda RX4             6 160.0 110 3.90 2.620
#Mazda RX4 Wag         6 160.0 110 3.90 2.875
#Datsun 710            4 108.0  93 3.85 2.320
#Hornet 4 Drive        6 258.0 110 3.08 3.215
#Hornet Sportabout     8 360.0 175 3.15 3.440
#......so on
0 голосов
/ 07 мая 2018

Мы можем сделать с этим select из dplyr

Ответ а)

mtcars %>% select(drat:get(last(names(.))))

Ответ б)

mtcars %>% select(cyl:wt)
0 голосов
/ 07 мая 2018

Если нам нужно использовать строку в кавычках, преобразовать ее в sym (symbol) и затем выполнить оценку (!!

)
mtcars %>% 
     select(!! (rlang::sym("cyl")): !!(rlang::sym("wt")))

Это было бы, когда они хранятся в объекте

a <- "cyl"
b <- "wt"

mtcars %>%
  select(!! (rlang::sym(a)): !!(rlang::sym(b)))

Или другой вариант

mtcars %>%
    select(!! rlang::parse_expr(glue::glue("{a}:{b}")))
0 голосов
/ 07 мая 2018

В dplyr функция select делает именно это (без кавычек):

mtcards %>%
  select(cyl:wt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...