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

我能在R tidy select函数中使用布尔运算符吗

  •  0
  • spindoctor  · 技术社区  · 4 年前

    tidyselect 帮助函数选择变量?

    下面的代码说明了当前的工作方式,以及在我看来,哪些应该工作,哪些不应该。

    df<-sample(seq(1,4,1), replace=T, size=400)
    df<-data.frame(matrix(df, ncol=10))
    
    #make variable names
    library(tidyverse)
    library(stringr)
    vars1<-str_c('q1_', seq(1,5,1))
    vars2<-str_c('q9_', seq(1,5,1))
    #Assign
    names(df)<-c(vars1, vars2)
    names(df)
    
    
    #This works 
    df %>% 
      select(starts_with('q1_'), starts_with('q9'))
    #This does not work using |
    df %>% 
      select(starts_with('q1_'| 'q9_'))
    #This does not work with c() 
    df %>% 
      select(starts_with(c('q1_', 'q9_')))
    
    1 回复  |  直到 4 年前
        1
  •  4
  •   Gregor Thomas    4 年前

    您可以使用多个 starts_with ,例如。,

    df %>% select(starts_with('q1_'), starts_with('q9_'))
    

    你可以用 | matches() (在这种情况下,结合 ^ ,字符串的regex开头)

    df %>% select(matches('^q1_|^q9_'))
    
        2
  •  0
  •   tmfmnk    4 年前

    purrr :

    map(.x = c("q1_", "q9_"), ~ df %>%
         select(starts_with(.x))) %>%
     bind_cols()
    
       q1_1 q1_2 q1_3 q1_4 q1_5 q9_1 q9_2 q9_3 q9_4 q9_5
    1     2    4    3    1    2    2    3    1    1    3
    2     1    3    3    4    4    3    2    2    1    3
    3     2    2    3    4    3    4    1    3    2    4
    4     1    2    4    2    4    3    3    1    3    3
    5     3    1    2    3    3    2    2    3    3    3
    6     4    2    3    4    1    4    2    4    2    4
    7     3    1    4    1    4    2    4    4    1    2
    8     2    2    3    2    1    3    3    3    1    4
    9     1    4    2    3    4    4    1    1    3    4
    10    1    1    2    4    1    1    4    4    1    2