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 - 仅选择数据框的因子列的主要内容,如果未能解决你的问题,请参考以下文章