2016-10-12 7 views
0

私は116文字の変数を持ち、それぞれ固有のレベルの固有値を持っています。いくつかはレベルが2つしかなく(例えば、A & B)、その他のレベルは327レベルです。私はこのコードを使用することで、1つでfactorの1に変換することができます各変数がループ内で独自の合計レベルを持つときに変数をRに因数変換するように変換する

#train_cat <- training dataset 
#cat1 <- character variable 

dist <- length(unique(train_cat$cat1)) 
x <- seq(1, dist) 
cat1 <- factor(train_cat$cat1, labels = x) 

しかし、私は文字変数はcat1cat2cat3を命名されているように、ループ内でこれらの変更を行うことができるようにしたいと思い、。 ..、cat116

答えて

0

for loopを使用できます。

私は、数字で番号を付け直したあと、もはやそれ以上ではなく、distが必要と思っています。同様に、私のコード例では、すべての変数が要因に切り替えられると仮定します。そうでない場合は、そのサブグループに関数を適用するだけです。

ザ・次のようになりますループの場合:

for (var in names(train_cat)){ 
    fact <- factor(train_cat[var], labels=seq(1,length(unique(train_cat[var]))) 
    assign(var, fact) 
} 

他のオプションはfor loopfactorで、このように自分のvariableに行われたが、applyを使用することです、あなたは新しいdata.frameを取得しますすべての変数でapply

それは次のように動作します:

fact <- apply(train_cat, 2,function(x){factor(x,labels = seq(1,length(unique(x))))}) 
cat_vars <- data.frame(fact) 
0

どのようにこのワンライナーについて:

x <- data.frame(x = 1:10, 
       cat1 = sample(letters[1:3], size = 10, replace = T), 
       cat2 = sample(letters[1:3], size = 10, replace = T)) 

x[,grep("cat", colnames(x))] <- data.frame(lapply(x[,grep("cat", colnames(x))], factor)) 
関連する問題