Я пытаюсь использовать dplyr
для filter
мои данные на основе условия тестирования, но это условие проверки может меняться в зависимости от других переменных.R - данные фильтра с dplyr с использованием условия тестирования
Используя встроенный образец набора данных cars
:
data(cars)
Я хотел бы сделать что-то вроде этого:
if (foo == 0) {
test <- speed > 15
} else {
test <- dist < 50
}
filter(cars, test)
Это не работает. Я могу заставить его работать, если я изменить его на что-то вроде этого:
if (foo == 0) {
test <- 'cars$speed > 15'
} else {
test <- 'cars$dist < 50'
}
filter(cars, eval(parse(text = test)))
Но
- Имея в впечатать
cars$speed
иcars$dist
, кажется, поражение цели с помощью функцииfilter
. - Согласно this SO ответьте, используя конструкцию
eval(parse(text = ...))
не рекомендуется.
Есть ли лучший способ достичь этого?
Спасибо! Я согласен с тем, что 'cars [test,]' было бы лучшим решением для этого случая - это был упрощенный пример ради минимального фрагмента кода для вопроса. По какой-то причине это не работало для меня, когда я попытался внедрить это в функцию, которая принимает значение df, column и value и возвращает отфильтрованный набор результатов. Но на самом деле, похоже, сейчас он работает с такой логикой. – Steve