#r #dplyr
#r #dplyr
Вопрос:
В функции R, использующей {dplyr}, я хотел бы использовать условие в функции фильтра следующим образом :
У меня возникла эта проблема : Error in filter_impl(.data, quo) : Argument 2 filter condition does not evaluate to a logical vector
myfunction <- function(param="one") {
iris %>%
filter(
if (param=="one") {
#do nothing
} else if (param=="two") {Species=="setosa"})
}
myfunction(param="one")
Комментарии:
1. Чего вы на самом деле пытаетесь достичь? Я нахожу странным использовать
if
условие внутриdplyr::filter
.2. Вы можете попробовать
dplyr::mutate
илиdplyr::ifelse
выполнить3. Я не хочу добавлять столбец, а просто хочу отфильтровать фрейм данных с условием в моей функции. В моем примере, если параметр ==»один», не фильтровать iris, а если параметр ==»два» фильтровать с моим условием
Ответ №1:
Сделайте два условия в виде комбинированного или логического утверждения. Я понимаю, что вы пытаетесь сделать, это получить строки, где либо param == 'one'
или param == 'two' and Species == 'setosa'
С помощью этого вы можете использовать следующий фильтр
# sample data and package
data(iris)
library(tidyverse)
# make a random param column
new_df = iris %>% mutate(param = sample(c('one','two','three'),
size=nrow(.),
replace=T))
# Conduct filter
filtered_df = new_df %>%
filter((param == 'one') | (param == 'two' amp; Species == 'setosa'))
Комментарии:
1. Спасибо, но я просто хочу отфильтровать фрейм данных с условием в моей функции. В моем примере, если параметр ==»один», не фильтровать iris, а если параметр ==»два» фильтровать с моим условием
Ответ №2:
В этом простом случае я бы сделал это так:
myfunction <- function(param="one") {
out <- iris
if (param != "one")
out <- out %>% filter(Species == "setosa")
return(out)
}