Могу ли я использовать булевы операторы с функциями выбора t Tidy - PullRequest
2 голосов
/ 07 февраля 2020

Есть ли способ, которым я могу использовать булевы операторы (например, | или &) с вспомогательными функциями 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_')))

Ответы [ 2 ]

4 голосов
/ 07 февраля 2020

Вы можете использовать несколько starts_with, например,

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

Вы можете использовать | в регулярном выражении и matches() (в этом случае, в сочетании с ^, регулярное выражение начало строки)

df %>% select(matches('^q1_|^q9_'))
0 голосов
/ 07 февраля 2020

Вы также можете подойти к нему, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...