【发布时间】:2015-10-16 22:50:59
【问题描述】:
我想通过考虑其他 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 替换它时,我没有得到同样的错误。
【问题讨论】:
-
x3 的每个值将根据每个集群考虑 x2 和 x1 进行分类。所以我想要 x3 的均值,它是使用 kmeans 对 x1 和 x2 进行分组的结果。
-
@akrun 请看版本。