代码之家  ›  专栏  ›  技术社区  ›  asachet

dplyr选择辅助对象的交点

  •  3
  • asachet  · 技术社区  · 7 年前

    dplyr xxxx_at .vars 论点但是我想选择我选择的交叉点。

    [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

    在中使用几个条件 瓦尔斯 取它们的并集,而不是交点。

    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 是相关的,但我不知道如何使用它。

    select 而不是 select_at 但我想说的是一般性的。我的实际用例是 .

    2 回复  |  直到 7 年前
        1
  •  3
  •   FloSchmo    7 年前

    starts_with ends_with 两者都计算到列位置。因此,它们都返回表示列索引的数字。如果要同时应用这两个函数,则需要两个函数返回的列索引的交集。你可以通过打电话来做到这一点 intersect 从…开始

    df %>% 
      select_at(vars(intersect(starts_with("a"), ends_with("c")))) %>%
      names
    
        2
  •  4
  •   Andre Elrico    7 年前
    grep("^a.*c$", names(df), value = TRUE)
    
    #[1] "aac" "abc" "acc"
    

    dplyr

    df %>% 
        select_at(vars(matches("^a.*c$"))) %>%
        names
    
    #[1] "aac" "abc" "acc"