【问题标题】:define data.frame as a distance and perform hierarchical clustering in R将 data.frame 定义为距离并在 R 中执行层次聚类
【发布时间】:2020-05-27 08:59:48
【问题描述】:
ggg <- data.frame(row.names=c("a","b","c","d","e"),var1=c("0","0","0","0","0"),var2=c("1","1","1","1","2"))

ggg_dist <- as.matrix(ggg) %>% as.dist(.)

In as.dist.default(.) : non-square matrix

class(ggg_dist)
[1] "dist"

ggg_dist
Warning message:
In df[row(df) > col(df)] <- x :
  number of items to replace is not a multiple of replacement length

 h_ggg <- hclust(ggg_dist,method="average")

Fehler in hclust(ggg_dist, method = "average") : 
  'D' must have length (N \choose 2).

我想用ggg 执行层次聚类。 ggg_dist 是由 class() 确认的距离,由 ggg 组成。我想用ggg_dist 进行层次聚类,但这不起作用。它显示上述错误。我该如何解决。

我尝试了 How to convert data.frame into distance matrix for hierarchical clustering? ,但是当我尝试调用 ggg_dist 时遇到同样的错误。

【问题讨论】:

    标签: r distance hclust


    【解决方案1】:

    可以使用dist函数:

    ggg_dist <- dist(ggg, method = "euclidian")
    

    结果:

    ggg_dist
      a b c d
    b 0      
    c 0 0    
    d 0 0 0  
    e 1 1 1 1
    

    【讨论】:

    • 谢谢,但实际上ggg 包含我设置的距离。随着应用dist() R 计算距离的距离
    • 如果ggg 已经是距离,那么您是如何计算它们的,为什么不将它们格式化为距离矩阵呢?你设置它的方式似乎比必要的复杂
    【解决方案2】:

    as.dist() 需要方阵或 data.frame。您的原始对象 ggg 有 5 行但只有 2 列。

    类似下面的方法会起作用。

    ggg <- data.frame(row.names = c("a", "b"), 
                      var1 = c("0", "0"), 
                      var2 = c("1", "1"))
    
    ggg_dist <- as.dist(ggg)
    
    h_ggg <- hclust(ggg_dist, method="average")
    h_ggg
    #> 
    #> Call:
    #> hclust(d = ggg_dist, method = "average")
    #> 
    #> Cluster method   : average 
    #> Number of objects: 2
    

    reprex package (v0.3.0) 于 2020 年 5 月 27 日创建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-03
      • 2019-02-22
      • 2012-07-09
      • 2012-09-05
      • 2016-08-21
      • 2019-01-11
      • 2014-10-24
      • 2016-08-09
      相关资源
      最近更新 更多