3

我正在使用 R 的内置相关矩阵和层次聚类方法将每日销售数据分成 10 个集群。然后,我想按集群创建聚合的每日销售数据。例如,我已经创建了一个对象,但我很难只提取对象中簇号为 1cutree()的列名。cutree

为简单起见,我将使用EuStockMarkets数据集并将树分成 2 段;请记住,我在这里使用数千列,因此需要可扩展:

data=as.data.frame(EuStockMarkets)

corrMatrix<-cor(data)
dissimilarity<-round(((1-corrMatrix)/2), 3)
distSimilarity<-as.dist(dissimilarity)
hirearchicalCluster<-hclust(distSimilarity)
treecuts<-cutree(hirearchicalCluster, k=2)

现在,我卡住了。例如,我只想提取treecuts簇号等于 1 的列名。但是,制作的对象cutree()不是DataFrame,使得子设置变得困难。我尝试转换treecuts为数据框,但 R 不会为行名称创建列,它所做的只是将数字强制转换为具有 name 的行treecuts

我想做以下操作:

....Code that converts treecuts into a data frame called "treeIDs" with the 
columns "Index" and "Cluster"......

cluster1Columns<-colnames(treeIDs[Cluster==1, ])
cluster1DF<-data[ , (colnames(data) %in% cluster1Columns)]
rowSums(cluster1DF)

......瞧,我完成了。

想法/建议?

4

2 回答 2

2

为什么不只是

data$clusterID <- treecuts

然后像往常一样子集数据?

于 2013-10-25T03:00:33.273 回答
2

这是解决方案:

names(treecuts[which(treecuts[1:4]==1)])
[1] "DAX"  "SMI"  "FTSE"

如果你想,比如说,集群 2(或更高),你可以使用%in%

names(treecuts[which(treecuts[1:4] %in% c(1,2))])

[1] "DAX"  "SMI"  "CAC"  "FTSE"
于 2013-08-20T22:04:27.007 回答