仅选择数据框中的因子列

6
我正在尝试从我的数据框中仅选择因子列。以下是示例:
bank[,apply(bank[,names(bank)!="id"], is.factor)]

但是代码的行为很奇怪。逐步来看:

sapply(bank[,names(bank)!="id"], is.factor)

我收到:

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 

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

bank[,sapply(bank[,names(bank)!="id"], is.factor)]

但是结果是我得到了与原始银行数据框中完全相同的所有列。没有任何过滤掉的内容。我尝试了各种方法,但都找不到解决方案。请问我做错了什么?


@d.b 只是一个有许多列的数据框。 - Maksim Khaitovich
@d.b 不,我是从 csv 文件中加载的。没有什么特别的地方。 - Maksim Khaitovich
3
您应该提供一个可重现的示例。这将使帮助您更加容易。TRUE/FALSE值应该与所有列匹配。通过排除“id”列,您正在改变整个内容。 - MrFlick
2个回答

7
#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"]

1
谢谢,明白了。我没想到需要单独应用“not id”。 - Maksim Khaitovich

4
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)

library(dplyr)
df %>%  select_if(is.factor) %>% select(-id)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接