r - 从 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 的聚类中创建一个矩阵数据,其中品种将有序放置,簇名称和簇号将根据品种放置,如下图“品种分布”中显示的数据。品种分布
如果有人帮助我做到这一点,我将不胜感激。
解决方案
我认为您需要一个 data.frame/tibble,而不是矩阵,因为您通常不使用cluster
字符列(在预期结果中)进行计算。您的集群列表位于garlic$clusters
.
- 将 NA 添加到列表中的每个向量,以使每个向量具有相同的长度。
- 将它们组合成一个矩阵。将矩阵强制为 tibble
- 将它们折叠成成对的名称和值
- 通过提取中的数字添加一列 cluster_no
cluster
- 放弃 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()
推荐阅读
- angular - 如何从 Angular http.get 中的 json-server 读取 X-Total-Count?
- javascript - Javascript:有 Slice() 的负函数吗?
- react-admin - React Admin - 列表视图⋮“更多选项”按钮
- git - Does the direction or order of a merge/rebase make a difference?
- c# - c# HttpWebRequest 不反映 vpn 位置变化
- lua - 本地转换=string.char
- c# - Entity Framework Core - Generically assign dynamic values to common columns in code first
- java - 如何通过指定类而不是 jar 来加载代理
- java - 如何在 Spring Boot 应用程序中使用多个 mongodb 数据库?
- parsing - Convert String into exact same Int