2017-04-19 2 views
0

他のデータセットの列のクラスと一致するように、データセット内の変数のクラスを変更する関数を記述しようとしています。R内の列のクラスを他のデータセットのクラスと一致するように変更する機能

たとえば、クラスファクタとしてAという名前の列を持つデータセット1と、クラス文字を持つAという名前の列を持つデータセット2がある場合、列Aのクラスを変更したいデータセット2を因数分解する。

私はコードを持っていますが、なぜそれがクラスを変更できないのか分かりません。あなたは何か考えていますか?

change_class2=function(predict_set,train_set){ 
    col_drop=c() 
    for(column in colnames(predict_set)){ 
    if(!column %in% colnames(train_set)) 
    {col_drop=c(col_drop,column)} 

v=grep(column, colnames(predict_set)) 
w=grep(column, colnames(train_set)) 

if((class(predict_set[,v])!=class(train_set[,w]))*(is.factor(train_set[,w]))==1){ 
    predict_set[,v]=factor(predict_set[,v])} 
else if((class(predict_set[,v])!=class(train_set[,w]))*(is.character(train_set[,w]))==1){ 
    predict_set[,v]=as.character(predict_set[,v])} 
else if((class(predict_set[,v])!=class(train_set[,w]))*(is.numeric(train_set[,w]))==1){ 
    predict_set[,v]=as.numeric(predict_set[,v])} 
else if((class(predict_set[,v])!=class(train_set[,w]))*(is.integer(train_set[,w]))==1){ 
    predict_set[,v]=as.integer(predict_set[,v])} 
else{ 
    predict_set[,v]=predict_set[,v]} 

} }

答えて

0

は、あなたがオブジェクトにクラスを割り当てるためにclass機能を使用することができます。

class(predict_set[, v]) <- class(train_set[, w]) 

さらに一歩それを取ると、あなたの代わりに文字列として列を参照することができます彼らの指数はあなたのvwgrepのステートメントを取り出し、ちょうどcolumnを使用することができます:

だから、すべて一緒
class(predict_set[, column]) <- class(train_set[, column]) 

change_class2 <- function(predict_set, train_set) { 
    for (column in colnames(predict_set) { 
    class(predict_set[, column]) <- class(train_set[, column]) 
    } 
} 
+0

それは動作しますが、多くの感謝! – Oolis

+0

@Oolisがお手伝いしてうれしい!偉大な答えを受け入れることができたら – Paolo

関連する問題