解决方案
我采用了@thelatemail提供的解决方案,因为我正在尝试坚持使用tidyverse和dplyr,我还是R的新手,所以我正在采取渐进式的方法并利用辅助库。谢谢所有人抽出时间贡献解决方案。
df_new <- df_inh %>%
select(
isolate,
Phenotype,
which(
sapply( ., function( x ) sd( x ) != 0 )
)
)
问题
我想选择列名为“isolate”或“Phenotype”,或者如果列值的标准差不为0,则选择该列。
我尝试了以下代码:
df_new <- df_inh %>%
# remove isolate and Phenotype column for now, don't want to calculate their standard deviation
select(
-isolate,
-Phenotype
) %>%
# remove columns with all 1's or all 0's by calculating column standard deviation
select_if(
function( col ) return( sd( col ) != 0 )
) %>%
# add back the isolate and Phenotype columns
select(
isolate,
Phenotype
)
我也尝试了这个
df_new <- df_inh %>%
select_if(
function( col ) {
if ( col == 'isolate' | col == 'Phenotype' ) {
return( TRUE )
}
else {
return( sd( col ) != 0 )
}
}
)
我可以通过标准差或列名选择列,但是我不能同时进行这两个操作。
dput
命令包含至少一份数据样本,并将输出添加到您的问题中。 - morgan121dat[names(dat) %in% c("isolate","Phenotype") | sapply(dat, sd) != 0]
或者使用相同的逻辑在dplyr
中也可以 -dat %>% select(isolate, Phenotype, which(sapply(., function(x) sd(x) != 0)))
。 - thelatemail.
代表由%>%
传入的整个对象,本例中仅为数据集dat
。 - thelatemail