dplyr:同时按名称和值选择

dplyr:同时按名称和值选择,r,select,dplyr,R,Select,Dplyr,(这个问题可能是重复的,但我还没发现有人问它……) 使用dplyr技术,如何同时按名称和值从data.frame中选择列?例如,以下内容(不起作用): 数据帧(x=4,y=6,z=3)%>% 选择_if(匹配('x')|平均值(.)>5) 错误:未注册tidyselect变量 在base R中,我会这样做: df[name(df)='x'| colMeans(df)>5] xy 1 4 6 我们可以使用select\u if根据条件提取列名,并在select中对匹配“x”的列名使用该选项 da

(这个问题可能是重复的,但我还没发现有人问它……)

使用
dplyr
技术,如何同时按名称和值从
data.frame
中选择列?例如,以下内容(不起作用):

数据帧(x=4,y=6,z=3)%>% 选择_if(匹配('x')|平均值(.)>5) 错误:未注册tidyselect变量 在base R中,我会这样做:

df[name(df)='x'| colMeans(df)>5] xy 1 4 6
我们可以使用
select\u if
根据条件提取列名,并在
select
中对匹配“x”的列名使用该选项

data.frame(x=4, y=6, z=3) %>% 
     select(matches("x"), names(select_if(., ~ mean(.x) > 5)))
#  x y
#1 4 6

注意:这里我们使用的是
select_if
,因为OP需要一个具体的答案。否则,它可以通过许多其他方式完成

更新:使用
dplyr
v1.0.0

data.frame(x=4, y=6, z=3) %>%
      select(matches("x"), where(~mean(.) > 5))
原始答案: 您可以使用带有逗号的
select
colMeans

data.frame(x=4, y=6, z=3) %>%
  select(matches("x"), which(colMeans(.) > 5))
  x y
1 4 6

美好的我甚至没有想过要这样尝试。直接转到
bind\u cols
:)酷,我不知道(或忘了)我们可以在
select
子句中执行
(colMeans(.)>5)
。如果我们能去掉
,那就太好了,我想知道为什么不允许使用与列数相同长度的逻辑向量。相关/可能重复:谢谢@RonakShah,这看起来确实很接近,尽管我的问题更抽象/抽象,在另一个问题中,他们从来没有得到过像安德鲁那样干净的回答。谢谢。我不是特别想找到一种使用
select\u if
的方法,只是一般的
dplyr
技术。@KenWilliams
colMeans
技术是
base R
。使用
base R