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

Posted

技术标签:

【中文标题】R - 仅选择数据框的因子列【英文标题】:R - select only factor columns of dataframe 【发布时间】:2017-08-26 03:43:24 【问题描述】:

我正在尝试从我的数据框中仅选择因子列。示例如下:

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 只是一个包含一堆列的数据框 @d.b 不,我从 csv 加载它。没什么特别的。 您应该提供reproducible example。这将使您更容易为您提供帮助。 TUE/FALSE 值应与您的所有列匹配。通过排除“id”列,您正在改变所有内容。 【参考方案1】:
#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"]

【讨论】:

谢谢,有道理。没想到我需要单独申请'not id'。【参考方案2】:
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)

【讨论】:

以上是关于R - 仅选择数据框的因子列的主要内容,如果未能解决你的问题,请参考以下文章

使用 R 中的列名渲染因子

限制R中数据框中的列类

直方图基数选择性群集因子

R中数据框的空间子集

如何使用此代码仅获取我想移动到新数据框的列? [复制]

在闪亮的 R 中使用 selectInput 来选择和过滤行,而不是选择列