I have this dataframe that I'll like to subset (if possible, with dplyr
or base R
functions):
df <- data.frame(x = c(1,1,1,2,2,2), y = c(30,10,8,10,18,5))
x y
1 30
1 10
1 8
2 10
2 18
2 5
Assuming x are factors (so 2 conditions/levels), how can I subset/filter this dataframe so that I get only df$y
values that are greater than 15 for df$x == 1
, and df$y
values that are greater than 5 for df$x == 2
?
This is what I'd like to get:
df2 <- data.frame(x = c(1,2,2), y = c(30,10,18))
x y
1 30
2 10
2 18
Appreciate any help! Thanks!
If you have several 'x' groups, one option would be to use mapply
. We split
the 'y' using 'x' as grouping variable, create the vector of values to compare against (c(15,5)
) and use mapply
to get the logical index for subsetting the 'df'.
df[unlist(mapply('>', split(df$y, df$x), c(15,5))),]
# x y
#1 1 30
#4 2 10
#5 2 18
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With