我想通过与考虑其他 2 个变量 X1 和 X2 计算的每个集群相对应的平均值来估算变量 x3。我知道你可以传递一个函数来从 Hmisc 包中进行估算,比如“mean”,它可以完成工作。所以我想传递一个执行以下所有操作的函数。
我用来编写代码来做到这一点:
df1 <- data.frame(x1=runif(1000,0,100),
x2=runif(1000,0,100),
x3=c(runif(900,0,100),rep(NA,100)))
我想传递一个完成所有这些的函数:
clust<-kmeans(df1[,-grep('x3', colnames(df1))], 3)
df1$clust<-clust$cluster
library(plyr)
cc<-ddply(df1, 'clust',summarise, mean=mean(x3, na.rm=TRUE))
df2<-merge(df1,cc, by='clust')
df2$x3imputed2<-ifelse(is.na(df2$x3),df2$mean, df2$x3)
有没有办法将所有这些代码作为函数传递并在 Hmisc 中使用?(我在 ddply 引入 x3 作为变量时遇到了问题)。
类似于以下内容:
ff<-function(i) {
clust<-kmeans(df1[,-grep(i, colnames(df1))], 3)
df1$clust<-clust$cluster
cc<-aggregate(df1[,i], by=list(clust=df1$clust), "mean", na.rm=TRUE)
df2<-merge(df1,cc, by='clust')
df2$x3imputed2<-ifelse(is.na(df2[, i]),df2$x, df2[,i])
}
f1$imputedx3<-with(df1, impute(x3,ff))
但我收到一个错误:
空簇:尝试一组更好的初始中心
当我用 x3 替换它时,我没有得到同样的错误。