Mishalb
Mishalb

Reputation: 173

How to use conditionals with filters in R

I've seen quite a few posts on here about conditional filtering, but I can't seem to fit one to my example.

Using R, I am attempting to take this dataframe

original_df <- 
tribble(
  ~name, ~grade_level, ~assessment_level, 
  "A", 0, "pre read",
  "A", 0, "step 0",
  "A", 0, "step 1", 
  "A", 0, "step 2",
  "B", 1, "pre read",
  "B", 1, "step 1",
  "B", 1, "step 2",
  "C", 2, "pre read",
  "C", 2, "step 1",
  "C", 2, "step 2"
)

and filter it using these conditions

conditions: 
  if grade_level == 0 then filter(assessment_level == "pre read" | assessment_level == "step 0")
  if grade_level == 1 then filter(assessment_level == "step 1")
  if grade_level == 2 then filter(assessment_level == "step 2")

I need the final dataframe to look like this.

final_df <- tribble(
  ~name, ~grade_level, ~assessment_level, 
  "A", 0, "pre read",
  "A", 0, "step 0",
  "B", 1, "step 1",
  "C", 2, "step 2"
)

Any ideas?

Upvotes: 0

Views: 55

Answers (2)

r2evans
r2evans

Reputation: 160447

Another option, using the premise of an inner-join:

fltrs <- tibble(grade_level = c(0, 0, 1, 2), assessment_level = c("pre read", "step 0", "step 1", "step 2"))
inner_join(original_df, fltrs, by = c("grade_level", "assessment_level"))
# # A tibble: 4 x 3
#   name  grade_level assessment_level
#   <chr>       <dbl> <chr>           
# 1 A               0 pre read        
# 2 A               0 step 0          
# 3 B               1 step 1          
# 4 C               2 step 2          

Upvotes: 2

Emily Kothe
Emily Kothe

Reputation: 872

You could define the conditionals within the filter using something like

original_df %>% 
  filter((grade_level == 0 & assessment_level == "pre read") | 
         (grade_level == 0 & assessment_level == "step 0")   | 
         (grade_level == 1 & assessment_level == "step 1")   |
         (grade_level == 2 & assessment_level == "step 2"))

Upvotes: 0

Related Questions