2017-03-31 64 views
1

我想从我的数据框中只选择因子列。示例如下:R - 选择数据帧的唯一因子列

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 

看起来OK。现在,我认为我只是通过TRUE/FALSE的这个矩阵下一步并获得唯一的列我需要:

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

但作为结果我得到的所有相同的列在原银行的数据帧。没有东西被过滤掉。我尝试过这种或那种方式,但找不到解决方案。任何关于我做错的建议?

+0

@ d.b只是与一群@ d.b都能跟得上列 –

+0

的数据帧,我从CSV加载它。没什么特别的。 –

+3

你应该提供一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。这会让你更容易帮助你。 TUE/FALSE值应该与所有列匹配。通过排除“id”列,您正在改变一切。 – MrFlick

回答

2
#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'。 –

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