(This question is probably a duplicate, but I can't find it being asked yet...)
Using dplyr
techniques, how can I select columns from a data.frame
by both names & values at the same time? For example the following (which doesn't work):
> data.frame(x=4, y=6, z=3) %>%
select_if(matches('x') | mean(.) > 5)
Error: No tidyselect variables were registered
In base R, I would do something like this:
> df <- data.frame(x=4, y=6, z=3)
> df[names(df) == 'x' | colMeans(df) > 5]
x y
1 4 6
Update: Using dplyr
v1.0.0:
data.frame(x=4, y=6, z=3) %>%
select(matches("x"), where(~mean(.) > 5))
Original answer:
You could use select
with a comma and colMeans
data.frame(x=4, y=6, z=3) %>%
select(matches("x"), which(colMeans(.) > 5))
x y
1 4 6
We could use select_if
to extract the column names based on the condiiton and use that in select
for those column names matching 'x'
data.frame(x=4, y=6, z=3) %>%
select(matches("x"), names(select_if(., ~ mean(.x) > 5)))
# x y
#1 4 6
NOTE: Here we are using select_if
as the OP wanted an answer specificially with that. Otherwise, it can be done in many other ways
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