Reputation: 173
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
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
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