首页 > 解决方案 > R:使用 model$xlevels 对数据进行子集化以获取训练数据

问题描述

考虑 mtcars 示例:

model <- fit3 <- lm(mpg ~ factor(am)+wt+qsec+hp+drat, data = mtcars)

当你这样做

model$xlevels

我们得到了用于建模的变量的水平。

如果我想使用这些级别详细信息对我的数​​据进行子集化以返回到训练数据级别,假设新数据具有比以前用于建模的更多级别。我怎么能那样做?

目的是避免新数据中有新因素的错误。

我的预期解决方案是:

td <- train_data
dim(td)
for(i in 1:length(model$xlevels)){
    print(i)
    mod.seg <- as.data.frame(model$xlevels[i])
    j = colnames(mod.seg)

    attributes <- paste0("subset(td, ",j," %in% unique(mod.seg$",j,"))")
    td <- unique(eval(parse(text=attributes)))
}
dim(td)

标签: rmodeltraining-data

解决方案


td <- train_data
dim(td)
for(i in 1:length(model$xlevels)){
    print(i)
    mod.seg <- as.data.frame(model$xlevels[i])
    j = colnames(mod.seg)

    attributes <- paste0("subset(td, ",j," %in% unique(mod.seg$",j,"))")
    td <- unique(eval(parse(text=attributes)))
}
dim(td)

推荐阅读