此代码段采用数据集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 ")
}
}
答案 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"