Использовать условие в функции фильтра

#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)
}