首页 > 解决方案 > 从 r 中的 Tocher 的 clustring 方法创建数据框

问题描述

我使用“biotools”包来计算 Tocher 的聚类。数据有17个品种,分为6个集群。代码和结果如下。

data(garlicdist)   
   garlic <- tocher(garlicdist)   
   garlic


>  Tocher's Clustering 

$`cluster 1`
[1] 8  9  12 4  10 2  7  15

$`cluster 2`
[1] 1  6  14

$`cluster 3`
[1] 11 13

$`cluster 4`
[1] 3 5

$`cluster 5`
[1] 16

$`cluster 6`
[1] 17

现在我想从这个 Tocher 的聚类中创建一个矩阵数据,其中品种将有序放置,簇名称和簇号将根据品种放置,如下图“品种分布”中显示的数据。品种分布

如果有人帮助我做到这一点,我将不胜感激。

标签: rdataframecluster-analysis

解决方案


我认为您需要一个 data.frame/tibble,而不是矩阵,因为您通常不使用cluster字符列(在预期结果中)进行计算。您的集群列表位于garlic$clusters.

  1. 将 NA 添加到列表中的每个向量,以使每个向量具有相同的长度。
  2. 将它们组合成一个矩阵。将矩阵强制为 tibble
  3. 将它们折叠成成对的名称和值
  4. 通过提取中的数字添加一列 cluster_nocluster
  5. 放弃 NA

最终代码:

library(biotools)
library(tidyverse)
library(stringr)

data(garlicdist)   
garlic <- tocher(garlicdist)
cluster_df <- garlic$clusters %>% 
  sapply("length<-", n = max(length(.))) %>% 
  as_tibble() %>% gather(cluster, variety) %>% 
  mutate(cluster_no = str_extract(cluster, "[:digit:]+")) %>% 
  drop_na()

推荐阅读