NA中的聚类函数(kmeans,pam,clara)。如何将群集与原始数据相关联?

时间:2014-12-18 11:54:20

标签: r cluster-analysis k-means na missing-data

我需要对一些数据进行聚类,然后我尝试用kmeanspamclara与R

问题是我的数据位于数据框的一列中,并包含NA。

我使用na.omit()来获取群集。但是,我如何将它们与原始数据相关联?这些函数返回一个没有NA的整数向量,它们不保留任何有关原始位置的信息。

是否有一种聪明的方法将群集与数据框中的原始观察结果相关联? (或当存在NA时智能地执行聚类的方法?)

由于

2 个答案:

答案 0 :(得分:8)

kmeans的输出对应于作为参数x传递的对象的元素。在您的情况下,您省略了NA元素,因此$cluster表示na.omit(x)的每个元素所属的群集。

这是一个简单的例子:

d <- data.frame(x=runif(100), cluster=NA)
d$x[sample(100, 10)] <- NA
clus <- kmeans(na.omit(d$x), 5)

d$cluster[which(!is.na(d$x))] <- clus$cluster

在下图中,颜色表示每个点所属的聚类。

plot(d$x, bg=d$cluster, pch=21)

enter image description here

答案 1 :(得分:1)

此代码适用于我,从包含整行NA的矩阵开始:

DF=matrix(rnorm(100), ncol=10)
row.names(DF) <- paste("r", 1:10, sep="")
DF[3,]<-NA
res <- kmeans(na.omit(DF), 3)$cluster
res
DF=cbind(DF, 'clus'=NA)
DF[names(res),][,11] <- res
print(DF[,11])