首页 > 解决方案 > dplyr 选择助手的交集

问题描述

我想通过参数将 data.frame 的一组列指定为dplyr函数。但我想选择我的选择的交集。xxxx_at.vars

下面是一个示例:一个 data.frame ,其名称为 form [abc][abc][abc]

df <- structure(list(aaa = 1L, baa = 2L, caa = 3L, aba = 4L, bba = 5L, 
    cba = 6L, aca = 7L, bca = 8L, cca = 9L, aab = 10L, bab = 11L, 
    cab = 12L, abb = 13L, bbb = 14L, cbb = 15L, acb = 16L, bcb = 17L, 
    ccb = 18L, aac = 19L, bac = 20L, cac = 21L, abc = 22L, bbc = 23L, 
    cbc = 24L, acc = 25L, bcc = 26L, ccc = 27L), class = "data.frame", row.names = c(NA, 
-1L))


# names(df)
# [1] "aaa" "baa" "caa" "aba" "bba" "cba" "aca" "bca" "cca" "aab" "bab" "cab" "abb" "bbb" "cbb" "acb" "bcb"
# [18] "ccb" "aac" "bac" "cac" "abc" "bbc" "cbc" "acc" "bcc" "ccc"

我想一口气选择开头"a" 结尾的列"c"。为了将解决方案与mutate_at, group_by_at,一起使用and_so_on_at,它需要适合单个调用vars.

在 in 中使用多个条件vars需要它们的并集而不是交集。

df %>% 
select_at(vars(starts_with("a"), end_with("c"))) %>%
names

# [1] "aaa" "aba" "aca" "aab" "abb" "acb" "aac" "abc" "acc" "bac" "cac" "bbc" "cbc" "bcc" "ccc"

我试图得到:

[1] "aac" "abc" "acc"

我有一种感觉all_vars是相关的,但我不知道如何使用它。

PS:我知道我可以使用select而不是,select_at但我试图笼统。我的实际用例是mutate_at.

标签: rdplyr

解决方案


grep("^a.*c$", names(df), value = TRUE)

#[1] "aac" "abc" "acc"

如果你坚持使用dplyr

df %>% 
    select_at(vars(matches("^a.*c$"))) %>%
    names

#[1] "aac" "abc" "acc"

推荐阅读