如何在R之间在不同的数据帧之间建立一个层级集群?

时间:2016-05-23 20:31:44

标签: r cluster-analysis

我有4个不同的数据框用于不同的城市,但具有相同的变量。我想在城市的数据集之间建立一个层次结构的集群。我已尝试使用此代码在R:

中创建分层集群
hc <- hclust(dist(df))
hcd <- as.dendrogram(hc)

但是这段代码生成了一个数据帧的树形图。我想要做的是在不同城市之间制作一个树状图,所以我想将行划分为不同城市之间的行。我在互联网上搜索了很多,我找不到任何关于它的东西。有谁知道如何解决这个问题?

我还试图合并数据集,但随后它也会生成具有相同城市的集群。我想在不同城市之间制作集群

我的数据集示例如下:

我有4个不同的数据框用于不同的城市,但具有相同的变量。我想在城市的数据集之间建立一个层次结构的集群。我已尝试使用此代码在R:

中创建分层集群
hc <- hclust(dist(df))
hcd <- as.dendrogram(hc)

但是这段代码生成了一个数据帧的树形图。我想要做的是在不同城市之间制作一个树状图,所以我想将行划分为不同城市之间的行。我在互联网上搜索了很多,我找不到任何关于它的东西。有谁知道如何解决这个问题?

我还试图合并数据集,但随后它也会生成具有相同城市的集群。我想在不同城市之间制作集群

我的数据集示例如下:

      colname_city   col_1   col_2
[1,]  Amsterdam      0.2     0.3
[2,]  Rotterdam      0.3     0.5
[3,]  Den Haag       0.4     0.2
[4,]  Utrecht        0.2     0.1
[5,]  Amsterdam      0.1     0.5
[6,]  Rotterdam      0.2     0.5
[7,]  Rotterdam      0.4     0.4
[8,]  Utrecht        0.5     0.3
[9,]  Utrecht        0.5     0.5
[10,] Den Haag       0.6     0.3

1 个答案:

答案 0 :(得分:1)

要分别对每个城市进行聚类,需要选择包含给定城市数据的行的子集。然后,将层次聚类仅应用于子集。 data是您的示例表。

city_hc <- function(city){
    temp <- data[which(data$colname_city == city),]
    hcd <- as.dendrogram(hclust(dist(temp)))
    return(hcd)
}

为了获得所有城市的树状图,我们循环遍历各个层次。

hcds <- lapply(levels(data$colname_city), city_hc)
names(hcds) <- levels(data$colname_city)

结果包含所有树形图的列表。

str(hcds)
# List of 4
#  $ Amsterdam:  ..--[dendrogram w/ 2 branches and 2 members at h = 0.274, midpoint = 0.5]
#   ..  |--leaf "1" 
#   ..  `--leaf "5" 
#  $ Den Haag :  ..--[dendrogram w/ 2 branches and 2 members at h = 0.274, midpoint = 0.5]
#   ..  |--leaf "3" 
#   ..  `--leaf "10" 
#  $ Rotterdam:  ..--[dendrogram w/ 2 branches and 3 members at h = 0.274, midpoint = 0.75]
#   ..  |--leaf "7" 
#   ..  `--[dendrogram w/ 2 branches and 2 members at h = 0.122, midpoint = 0.5]
#   ..    #  |--leaf "2" 
#   ..    #  `--leaf "6" 
#  $ Utrecht  :  ..--[dendrogram w/ 2 branches and 3 members at h = 0.612, midpoint = 0.75]
#   ..  |--leaf "4" 
#   ..  `--[dendrogram w/ 2 branches and 2 members at h = 0.245, midpoint = 0.5]
#   ..    #  |--leaf "8" 
#   ..    #  `--leaf "9" 

# plot a dendrogram
plot(hcds[[3]])

我希望这是你需要做的。

相关问题