如何操作 r 中的距离对象以仅提取我想要的值?

How do I manipulate a distance object in r to extract just the values I want?

我正在尝试进行一项分析,我需要使用索伦森距离或布雷-柯蒂斯距离了解社区组成随时间的相对变化。我有一个看起来像这样的图矩阵:

> example
plot species_a species_b species_c
1    1      0.16      0.25      0.00
2    2      0.00      1.00      0.00
3    3      0.70      0.00      0.25
4    1      1.00      0.00      0.00
5    2      0.10      0.40      0.50
6    3      0.30      0.30      0.30
7    1      0.20      0.20      0.60
8    2      0.11      0.12      0.13
9    3      0.00      0.00      0.90

在这个示例数据中,我有 3 个图,在 3 个不同的时间点测量,在我的真实数据中,我有 850 个图在 3 个不同的时间点测量。 我可以使用 r 和 vegan 包函数 vegdist:

轻松计算距离矩阵
 example<-example[,-1]
 di<-vegdist(example, method="bray")
          1         2         3         4         5         6         7         8
2 0.6453901                                                                      
3 0.7647059 1.0000000                                                            
4 0.7730496 1.0000000 0.2820513                                                  
5 0.5035461 0.6000000 0.6410256 0.9000000                                        
6 0.3740458 0.6842105 0.4054054 0.6842105 0.2631579                              
7 0.4893617 0.8000000 0.5384615 0.8000000 0.2000000 0.2631579                    
8 0.4025974 0.8235294 0.6335878 0.8382353 0.4852941 0.4285714 0.4705882          
9 1.0000000 1.0000000 0.7297297 1.0000000 0.4736842 0.6666667 0.3684211 0.7936508

我想从我的距离对象中提取的是每个时间步之间的每个绘图之间的距离,如下所示:

Plot    distance1   distance 2  distance3
1   0.5 0.75    0.9
2   0.1 0.2 0.3
3   0.01    0.1 0.5

距离 1 是时间 1 到时间 2 的距离,距离 2 是时间 2 到时间 3 的距离,距离 3 是时间 1 到时间 3 的距离。

有没有一种相对简单的方法可以从远处的对象中提取此信息?

处理这个问题的最简单方法可能是按图拆分数据,然后 运行 vegdist 每个图的三个值。

require(plyr)
require(vegan)
ddply(example, .(plot), function(x)as.vector(vegdist(x[,-1]))) 

您可能应该有一个时间栏。您可以使用它来对数据进行排序,以确保距离的第一列始终代表相同的时间。