Reputation: 23965
(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
Upvotes: 5
Views: 513
Reputation: 5138
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
Upvotes: 7
Reputation: 887048
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
Upvotes: 1