Как создать подмножество DataFrame, задав условие относительно имен столбцов - PullRequest
0 голосов
/ 03 октября 2019

Извините, если это очень простой вопрос, я новичок в программировании. Я хочу создать подмножество DataFrame (набор данных eclipse), используя конкретные имена столбцов. Однако, поскольку всего имеется 212 столбцов, а мне нужно 41 из них, запись каждого из имен столбцов в виде списка будет слишком длинной (и я полагаю, это не очень хороший способ кодирования). Поэтому вместо этого я решил получить столбцы, указав начало имен столбцов (что уменьшает список до 15 элементов). У меня есть имена столбцов, которые начинаются с определенных букв, таких как «NOF», «NOM», «NSF» и т. Д., И я хочу извлечь столбцы, начинающиеся с этих строк, чтобы создать мое новое подмножество. Я попытался выполнить код ниже:

eclipse_train <- subset(eclipse, select = starts_with(predictors))

Где предикторы - это список слов, с которых я хочу, чтобы столбцы начинались. Но, конечно, это дало ошибку:

Ошибка в start_with (предикторы): is_string (match) не TRUE

Я не мог придумать что-либо еще, чтобыфильтровать столбцы, которые начинаются с определенных строк, которые я хотел создать подмножество. Как я могу реализовать такую ​​вещь?

1 Ответ

1 голос
/ 03 октября 2019

Предполагая фрейм данных eclipse в примечании, используйте grep, чтобы найти индексы имен, которые начинаются с указанных строк и индекса этих индексов. Пакеты не используются.

eclipse[ grep("^(NOF|NOM|NSF)", names(eclipse)) ]

, что дает:

  NOFX NOMX NSFX
1    2    3    4

Примечание

Если бы нужные столбцы были смежными, как в примере в примечании, то этотакже работают там, где мы указываем имя и фамилию.

subset(eclipse, select = NOFX:NSFX)

, что дает тот же результат.

Примечание

nms <- c("A", paste0(c("NOF", "NOM", "NSF"), "X"), "B")
eclipse <- as.data.frame.list(setNames(seq_along(nms), nms))

, которое выглядит примерно так:

> eclipse
  A NOFX NOMX NSFX B
1 1    2    3    4 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...