我有一个主要是数字列的数据框,每个列都有很少的唯一元素。那些具有20或更少唯一值的人,我想将其转换为具有更多优势的因素,我希望使用gtools::quantcut
转换为因子。
我不了解ifelse
中lapply
的行为?
d <- data.frame(a = sample(1:10, 100, replace=T),
b = sample(1:10, 100 ,replace=T),
c = sample(1:30, 100 ,replace=T),
d = sample(1:30, 100 ,replace=T),
e = sample(1:30, 100 ,replace=T))
wrong <- as.data.frame(lapply(d[,sapply(d, is.numeric)],
function(x) ifelse(length(unique(x)) <=20,
as.factor(x),
quantcut(x))))
dim(wrong)
# [1] 1 5
right <- as.data.frame(lapply(d[, sapply(d, is.numeric)],
function(x) {
if(length(unique(x)) <= 20) {
return(as.factor(x))
}
quantcut(x)
}))
dim(right)
# [1] 100 5
答案 0 :(得分:1)
问题是当测试参数是标量时,你要求ifelse
返回一个向量。上面wrong
方式的ifelse语句返回所需向量的第一个元素。在帮助文件中:ifelse
只能返回&#34;与test
&#34;形状相同的值。