0

Rでデータ操作を行おうとしています。2つのデータフレームがあります。1つはトレーニングデータで、もう1つはテストデータです。すべてのデータはカテゴリであり、因子変数として保存されます。

データにいくつかのNAがあり、それらを「-1」に変換しようとしています。トレーニングデータに対して行うと、問題はありませんが、テストデータに対してはうまくいきません。

実行中のループ中に何かが値を変更しますが、何がわかりません。

これが前です:

> class(catTrain1[,"Cat_111"])
[1] "factor"
> class(catTest1[,"Cat_111"])
[1] "factor"

> table(catTrain1[,"Cat_111"])

  1   2 
726  25 
> table(catTest1[,"Cat_111"])

  0   1   2 
  1 503  15 

ループは次のとおりです。

> for(i in 1:ncol(catTrain1)){
+ catTrain1[,i] <- as.factor(as.character(ifelse(is.na(catTrain1[,i]), "-1", catTrain1[,i])))
+ }
> for(i in 1:ncol(catTest1)){
+ catTest1[,i]  <- as.factor(as.character(ifelse(is.na(catTest1[,i]), "-1", catTest1[,i])))
+ }

後は次のとおりです。

> table(catTrain1[,"Cat_111"])

  1   2 
726  25 
> table(catTest1[,"Cat_111"])

  1   2   3 
  1 503  15 

文字->数値変換で1つシフトアップするのを見てきましたが、特にデータフレーム/ループの1つだけで、なぜこれが発生しているのか理解できません。

助言がありますか?

4

2 に答える 2

2

呼び出しの最初のセットの列名はtable、因子のレベルです。の2番目の呼び出しセットではtable、列名はレベルインデックスです。ifelseレベルではなく、インデックスをプルしています。ループas.character内で、ファイナルcatTest1[,i]との周りにインを移動しますcatTrain1[,i]

于 2012-06-21T16:41:17.580 に答える
2

代わりにこれを試してください。(よりrのような、ベクトル化された):

levels( catTest1[,"Cat_111"] ) <- c( catTest1[,"Cat_111"], "-1")
catTest1[,"Cat_111"][ is.na(catTest1[,"Cat_111"]) ] <- -1
于 2012-06-21T16:52:01.520 に答える