Вы можете сделать:
select_if(iris %>% select_at(vars(-contains("Width"))), is.numeric)
Sepal.Length Petal.Length
1 5.1 1.4
2 4.9 1.4
3 4.7 1.3
4 4.6 1.5
5 5.0 1.4
Ответ на обновленный вопрос:
df1 <- iris %>%
group_by(Species) %>%
nest() %>%
mutate(data = map(data, function(x) select_if(x %>% select_at(vars(-contains("Width"))), is.numeric) %>% mutate(count = sum(rowSums(.))))) %>%
mutate(data = map(data, function(x) select_if(x %>% select_at(vars(-contains("Width"))), is.numeric) %>% mutate_all(funs((. / count) * 100 )))) %>%
unnest()
df2 <- iris %>%
group_by(Species) %>%
nest() %>%
mutate(data = map(data, ~ .x %>% select_if(is.numeric) %>% select_at(vars(-contains("Width"))) %>% mutate(count = sum(rowSums(.))))) %>%
mutate(data = map(data, ~ .x %>% select_if(is.numeric) %>% select_at(vars(-contains("Width"))) %>% mutate_all(funs((. / count) * 100 )))) %>%
unnest()
identical(df1, df2)
[1] TRUE
Как видно из кода для df1, вы все равно можете выполнить вложенный select()
, который возвращает те же результаты, что и две команды select()
по отдельности.