0
我有一個主要是數字列的數據框,每個列都有幾個獨特的元素。那些具有20個或更少的獨特價值的人,我想轉換爲因素,更多的,我想使用gtools::quantcut
轉換爲因素。使用if(。){} else {} lapply
什麼是我不瞭解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
看起來很清楚,你不應該使用'ifelse'這是一個不同的R函數,並要求所有涉及的向量是相同的長度'獨特'相當有效地擰緊。 –