Фильтрация фрейма данных в R: объединение GREP с именами переменных? - PullRequest
0 голосов
/ 29 апреля 2019

Я хочу отфильтровать фрейм данных на основе двух критериев: 1. Несколько ключевых переменных и 2. Несколько других переменных с определенным шаблоном.

Обычно я использую следующий код:

mydata <- rawData[,c("scenario","period","farmID",grep("planting_*",names(rawData), value = TRUE))]

Проблема возникает после того, как я обновил R до новой версии (3.5.3).Раньше все работало нормально, и я получил то, что хотел: новый фрейм данных, отфильтрованный по переменным.

Однако теперь R возвращает вектор только с именами переменных (без наблюдения).

Может ли кто-нибудь помочь мне с этим вопросом?

Большое спасибо!

1 Ответ

0 голосов
/ 29 апреля 2019

Этот код никогда не работал: вы не можете смешивать имена и числовые индексы в одном векторе поднабора.

Кроме того, ваше регулярное выражение неверно: * должно быть .* - в противном случае вы будете искать слово planting, за которым следует ноль или более символов подчеркивания. В вашем случае это не будет иметь значения, но это другое выражение и, таким образом, вводит в заблуждение читателей вашего кода.

Однако вы можете заставить его работать, заставив grep вернуть совпадающие имена вместо индексов:

planting_names <- grep("planting_.*", names(rawData), value = TRUE)
mydata <- rawData[ , c("scenario", "period", "farmID", planting_names)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...