我希望创建一个函数,将任何超过4个级别的因子变量转换为虚拟变量。数据集有~2311列,所以我真的需要创建一个函数。非常感谢您的帮助。
我编写了下面的代码,并希望能让它发挥作用。
library(dummies)
# example function
for(i in names(Final_Dataset)){
if(count (Final_Dataset[i])>4){
y <- Final_Dataset[i]
Final_Dataset <- cbind(Final_Dataset, dummy(y, sep = "_"))
}
}
我还在考虑一种替代方法,在这种方法中,我将得到所有需要进行dummied的列,然后循环遍历所有列,如果列号在该数组中,则从变量中创建虚拟变量。
答案 0 :(得分:2)
示例数据
fct = data.frame(a = as.factor(letters[1:10]), b = 1:10, c = as.factor(sample(letters[1:4], 10, replace = T)), d = as.factor(letters[10:19]))
str(fct)
'data.frame': 10 obs. of 4 variables:
$ a: Factor w/ 10 levels "a","b","c","d",..: 1 2 3 4 5 6 7 8 9 10
$ b: int 1 2 3 4 5 6 7 8 9 10
$ c: Factor w/ 4 levels "a","b","c","d": 2 4 1 3 1 1 2 3 1 2
$ d: Factor w/ 10 levels "j","k","l","m",..: 1 2 3 4 5 6 7 8 9 10
# keep columns with more than 4 factors
fact_cols = sapply(fct, function(x) is.factor(x) && length(levels(x)) > 4)
# create dummy variables for subset (omit intercept)
dummy_cols = model.matrix(~. -1, fct[, fact_cols])
# cbind new data
out_df = cbind(fct[, !fact_cols], dummy_cols)
答案 1 :(得分:0)
你可以获得超过给定数量级别(n = 4
)的所有列,例如
which(sapply(Final_Dataset, function (c) length(levels(c)) > n))