首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Vegan提取质心到数据帧的距离

用Vegan提取质心到数据帧的距离
EN

Stack Overflow用户
提问于 2022-07-26 20:09:32
回答 1查看 137关注 0票数 2

我有一个生物数据集,我想要计算质心和每个质心之间的距离代表一个给定的年份(因此,距离是按顺序计算的)。我正在探索usedist::dist_between_centroids()来计算高维空间中的距离,但是这看起来相当困难,因为函数需要分组变量的向量输入(在本例中是年份)。我已经将vegan::adonis()作为一种替代函数进行了探索,但我不知道如何提取距离。我使用沙丘附加了一些样本数据,并将其中一个因素重新编码为“年份”。我的实际数据集包含大约20年的数据,所以像下面这样手工计算距离是不实际的。我认为使用dist_between_centroids()的循环可能完成此任务,但我不知道如何在循环中指定分组向量。

代码语言:javascript
复制
# Species and environmental data
require(vegan)
require(usedist)

dune <- read.delim ('https://raw.githubusercontent.com/zdealveindy/anadat-r/master/data/dune2.spe.txt', row.names = 1)

dune.env <- read.delim ('https://raw.githubusercontent.com/zdealveindy/anadat-r/master/data/dune2.env.txt', row.names = 1)

data(dune) 
data(dune.env)

all_data <- cbind(dune.env, dune) %>%
              arrange(Use)

all_data$Use <- recode_factor(all_data$Use, "Hayfield"="2017")
all_data$Use <- recode_factor(all_data$Use, "Haypastu"="2018")
all_data$Use <- recode_factor(all_data$Use, "Pasture"="2019")


bio_data <- all_data[,6:35] 

bio_distmat <- vegdist(bio_data, method = "bray", na.rm=T) 


#store distance in matrix
dist_between_mat <- as.data.frame(matrix(ncol=3, nrow=2))
colnames(dist_between_mat) <- c("start_centroid","end_centroid","distance")

dist_between_mat[1,1] = "2017"
dist_between_mat[1,2] = "2018"
dist_between_mat[1,3] = dist_between_centroids(bio_distmat, 1:7,8:15) #distance between 2017 and 2018

dist_between_mat[2,1] = "2018"
dist_between_mat[2,2] = "2019"
dist_between_mat[2,3] = dist_between_centroids(bio_distmat, 8:15,16:20) #distance between 2018 and 2019
EN

回答 1

Stack Overflow用户

发布于 2022-07-27 09:24:50

vegan::adonis (或vegan::adonis2)不返回该信息。vegan::betadisper有。其结果对象包含distances,这是到相应组质心的距离,元素group具有相应组的信息。如果您只想要一个组,则必须给出一个常量向量作为组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73129205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档