我想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")))
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误,但我希望该函数给出"column1".
我期望这select()将允许类似的方法,filter()我们可以使用运算符设置多个条件,即类似filter(df, column1 %in% 1:5 & col2 != 2).
编辑
我注意到我的问题更为笼统,我想知道是否可以在select()、 likeselect(df, contains("1") | !starts_with("c"))等中传递任何组合。但不知道如何实现这样的功能。
您可以使用select_if和grepl
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
Run Code Online (Sandbox Code Playgroud)
如果你想使用selectwithcontains你可以这样做:
df %>%
select(intersect(contains("col"), contains("1")))
Run Code Online (Sandbox Code Playgroud)
这可以通过其他方式组合,如评论中所述:
df %>%
select(intersect(contains("1"), starts_with("c")))
Run Code Online (Sandbox Code Playgroud)