Rに次のデータがあるとしましょう。
training = factor(c(1,1,3,2,1,3,2,34,67,34))
test = factor(c(1,1,2,30,65,30))
(私のデータははるかに複雑です、これは単純化です)
テストセットのレベルがトレーニングセットに存在するかどうかを確認し、存在しない場合はトレーニングセットの最も近い値に置き換えたいと思います。たとえば、テストセットのレベル30と65はトレーニングセットに存在しないため、それぞれ34と67に置き換えたいと思います。
現在、以下のコードを作成しました。
replacefactor <- function(dat,new_factor,near_factor) {
if (!(near_factor %in% levels(dat))){
levels(dat) <- c(levels(dat),near_factor)
}
dat[dat==new_factor] <- near_factor
dat <- factor(dat)
}
test <- replacefactor(test,30,34)
test <- replacefactor(test,65,67)
動作しますが、レベルを手動で指定する必要があります。データのサイズが大きいため、これは実用的ではありません。
トレーニングセットで最も近い値を見つける方法がわかりません。次に、forループを使用して自動化できます。