我需要对一些数据进行聚类,然后我尝试用kmeans
,pam
和clara
与R
问题是我的数据位于数据框的一列中,并包含NA。
我使用na.omit()
来获取群集。但是,我如何将它们与原始数据相关联?这些函数返回一个没有NA的整数向量,它们不保留任何有关原始位置的信息。
是否有一种聪明的方法将群集与数据框中的原始观察结果相关联? (或当存在NA时智能地执行聚类的方法?)
由于
答案 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)
答案 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])