假设我的数据框DF
有两个列$A
和$B
。始终存在$A
。当值缺失时,$B
有时会编码为NaN。我想预测$B.predicted
,$B
的缺失值,并创建一个新列$B.complete
,$B.complete[i]
$B.predicted
如果$B[i]
是$B[i]
NaN,否则为DF$B.factor <- factor(DF$B)
model.results <- multinom(formula=B.factor ~ A,
data=DF[!is.na(DF$B),])
B.predicted <- predict(model.result, newdata=DF, type="class")
。
我使用multinom,它需要一个因子作为因变量,使用以下方法来预测我有完整观察的B:
B.predicted
变量DF$B
是一个因素。
我的DF$B
列不是一个因素。
Mu问题是我如何合并B.predicted
和B.complete
来创建B.predicted
?特别是,由于DF$B
是一个因素而B.complete <- ifelse(is.na(DF$B), $B.predicted, DF$B)
不是,因此此代码是否会获取正确的值?
{{1}}
答案 0 :(得分:1)
使用replace
set.seed(1)
DF <- data.frame(A = factor(sample(letters[1:5],30, TRUE)),
B = sample(c(letters[1:3],NA), 30 , TRUE, prob = rep(c(0.3,0.1),c(3,1))),
stringsAsFactors = F)
DF$B.factor <- factor(DF$B)
# no need to include is.na(DF$B) as multinom will omit anyway
model <- multinom(B.factor ~ A, data = DF)
# use replace to replace the NA values (converting to character when necessary)
DF$B.complete <- replace(DF$B, is.na(DF$B), as.character(predict(model, newdata = DF[is.na(DF$B),])))