Не уверен, что вы можете сделать это только с select_if
, но один из способов - объединить две операции select
и затем связать столбцы. Использование mtcars
в качестве образца данных.
library(dplyr)
bind_cols(mtcars %>% select_if(function(x) sum(x) > 1000),
mtcars %>% select(mpg, cyl))
# disp hp mpg cyl
#1 160.0 110 21.0 6
#2 160.0 110 21.0 6
#3 108.0 93 22.8 4
#4 258.0 110 21.4 6
#5 360.0 175 18.7 8
#6 225.0 105 18.1 6
#7 360.0 245 14.3 8
#8 146.7 62 24.4 4
#....
Однако, если столбец удовлетворяет обоим условиям (выбирается в select_if
, а также select
), столбец будет повторяться.
Мы также можем использовать базу R, которая дает тот же вывод, но избегает выбора столбца дважды с помощью unique
.
sel_names <- c("mpg", "cyl")
mtcars[unique(c(sel_names, names(mtcars)[sapply(mtcars, sum) > 1000]))]
Так что для вашего случая две версии будут:
bind_cols(df_inh %>% select_if(function(x) sd(x) != 0),
df_inh %>% select(isolate, Phenotype))
и
sel_names <- c("isolate", "Phenotype")
df_inh[unique(c(sel_names, names(df_inh)[sapply(df_inh, sd) != 0]))]