dplyr:同时通过名称和值进行选择

时间:2019-04-09 14:40:09

标签: r select dplyr

(这个问题可能是重复的,但是我还没被问到...)

使用dplyr技术,如何同时通过名称和值从data.frame中选择列?例如以下内容(无效):

> data.frame(x=4, y=6, z=3) %>%
    select_if(matches('x') | mean(.) > 5)
Error: No tidyselect variables were registered

在基数R中,我将执行以下操作:

> df <- data.frame(x=4, y=6, z=3)
> df[names(df) == 'x' | colMeans(df) > 5]
  x y
1 4 6

2 个答案:

答案 0 :(得分:6)

您可以使用select和逗号,colMeans

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

答案 1 :(得分:1)

我们可以使用select_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希望具体地给出答案。否则,可以通过许多其他方式完成