0

我想选择dplyr::select()使用contains()多个数据框的某些列。我知道还有其他方法可以解决它,但我想知道这在内部是否可行select()一个例子:

df <- data.frame(column1= 1:10, col2= 1:10, c3= 1:10)
library(dplyr)
names(select(df, contains("col") & contains("1")))

这给出了一个错误,但我希望函数给出"column1".

我希望这select()将允许一个类似的方法,filter()因为我们可以使用运算符设置多个条件,即类似filter(df, column1 %in% 1:5 & col2 != 2).

编辑

我注意到我的问题更笼统,我想知道是否可以在select()、 等中传递任何组合select(df, contains("1") | !starts_with("c"))。但不知道如何制作这样的功能。

4

3 回答 3

4

您可以使用select_ifgrepl

library(dplyr)

df %>% 
select_if(grepl("col", names(.)) & grepl(1, names(.)))


#   column1
#1        1
#2        2
#3        3
#4        4
#5        5
#6        6
#7        7
#8        8
#9        9
#10      10

如果您想selectcontains您一起使用,可以执行以下操作:

df %>% 
select(intersect(contains("col"), contains("1")))

如评论中所述,这可以通过其他方式组合:

df %>% 
select(intersect(contains("1"), starts_with("c")))
于 2019-11-05T13:42:01.410 回答
1

您还可以链接两个select调用:

library(dplyr)

df <- data.frame(column1 = 1:10, col2 = 1:10, c3 = 1:10)

df %>% 
  select(contains("col")) %>% 
  select(contains("1"))

对于单线爱好者来说不算太优雅

于 2019-11-05T15:03:45.333 回答
0

您可以使用该dplyr::intersect功能

select(df, intersect(contains("col"), contains("1")))

于 2019-11-05T15:07:40.193 回答