从 r 中的教师聚类方法创建数据框
Create data frame from Tocher's clustring method in r
我使用“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 的聚类中创建一个矩阵数据,其中品种将有序放置,簇名称和簇编号将根据品种放置,如下图所示的数据 "variety distribution"。 variety distribution
如果有人能帮助我做到这一点,我将不胜感激。
我认为您需要一个数据。frame/tibble,而不是矩阵,因为您通常不使用 cluster
字符列(在预期结果中)进行计算。您的集群列表在 garlic$clusters
.
- 将 NA 添加到列表中的每个向量,以便每个向量具有相同的长度。
- 将它们组合成一个矩阵。将矩阵强制为 tibble
- 将它们折叠成名称和值对
- 通过提取
cluster
中的数字添加一列cluster_no
- 放弃 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()
我使用“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 的聚类中创建一个矩阵数据,其中品种将有序放置,簇名称和簇编号将根据品种放置,如下图所示的数据 "variety distribution"。 variety distribution
如果有人能帮助我做到这一点,我将不胜感激。
我认为您需要一个数据。frame/tibble,而不是矩阵,因为您通常不使用 cluster
字符列(在预期结果中)进行计算。您的集群列表在 garlic$clusters
.
- 将 NA 添加到列表中的每个向量,以便每个向量具有相同的长度。
- 将它们组合成一个矩阵。将矩阵强制为 tibble
- 将它们折叠成名称和值对
- 通过提取
cluster
中的数字添加一列cluster_no - 放弃 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()