R中的函数,如果满足条件,则创建虚拟变量

时间:2017-07-19 18:23:34

标签: r

我希望创建一个函数,将任何超过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的列,然后循环遍历所有列,如果列号在该数组中,则从变量中创建虚拟变量。

2 个答案:

答案 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))