如何只查找类别变量?

时间:2015-11-17 14:03:18

标签: r

此代码段采用数据集train,并尝试在其变量不是类别时打印它。我发现is.factor(varname[i])总是FALSE。如何纠正它?

find_Cat <- function(){
  varname<-NULL
  for(i in  1 : length(names(train))){   
    varname[i]<-paste('train$',names(train)[i],sep='')
    if(is.factor(varname[i])) 
    print("This is Category variable ")    
  }
}

3 个答案:

答案 0 :(得分:2)

我们可以使用lapply

lapply(train, function(x) if(is.factor(x))
                   'This is Category variable'
                   else NULL)

答案 1 :(得分:1)

或者,如果你想要一个字符向量作为回报,你可以略微改变akrun的代码。

factors <- vapply(train, 
            function(x) if (is.factor(x)) 
                         "This is a Category Variable" 
                         else "", 
            character(1))

答案 2 :(得分:1)

如果您愿意,也可以使用Filter

使用内置的iris数据集:

names(Filter(is.factor, iris))
[1] "Species"

Filter将提取作为因子的列,names将返回因子列的名称。

根据您的评论,如果您想查找所有分类列的模式,您可以这样做:

df <- data.frame(a=runif(5), b=rep(c('a','b'), c(2,3)), c=rep(c('a','d'), c(2,3)) )

#> df
#           a b c
#1 0.29489199 a a
#2 0.08649974 a a
#3 0.65941729 b d
#4 0.49732569 b d
#5 0.62138883 b d


#the below will find the mode of the column whether it is factor or character 
#assuming you have numeric, integer, character and factor columns
lapply(Filter(Negate(is.numeric), df),
       function(x) names(sort(table(x), decreasing=TRUE)[1]))

$b
[1] "b"

$c
[1] "d"