假设我在 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 循环来自动化它。