R - 仅选择数据帧的因子列

Mak*_*ich 6 r dataframe data-cleaning data-science

我试图从数据框中仅选择因子列。示例如下:

bank[,apply(bank[,names(bank)!="id"], is.factor)]
Run Code Online (Sandbox Code Playgroud)

但代码的行为很奇怪。一步步:

sapply(bank[,names(bank)!="id"], is.factor)
Run Code Online (Sandbox Code Playgroud)

我得到:

age         sex      region      income     married    children         car 
      FALSE        TRUE        TRUE       FALSE        TRUE       FALSE        TRUE 
   save_act current_act    mortgage         pep      ageBin 
       TRUE        TRUE        TRUE        TRUE        TRUE 
Run Code Online (Sandbox Code Playgroud)

看起来不错。现在,我假设我只是将这个 TRUE/FALSE 矩阵传递到下一步并仅获取我需要的列:

bank[,sapply(bank[,names(bank)!="id"], is.factor)]
Run Code Online (Sandbox Code Playgroud)

但结果我得到了与原始银行数据框中相同的列。什么都没有被过滤掉。我以一种或另一种方式尝试过,但找不到解决方案。对我做错了什么有什么建议吗?

d.b*_*d.b 5

#DATA
df = mtcars
colnames(df) = gsub("mpg","id",colnames(df))
df$am = as.factor(df$am)
df$gear = as.factor(df$gear)
df$id = as.factor(df$id)

#Filter out 'id' after selecting factors
df[,sapply(df, is.factor) & colnames(df) != "id"]
Run Code Online (Sandbox Code Playgroud)