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

时间:2016-04-12 17:51:04

标签: r vegan

我正在尝试进行分析,我需要知道使用Sørensen或bray-Curtis距离的社区成分随时间的相对变化。我有一个看起来像这样的图表矩阵:

> 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个不同的时间点测量,在我的实际数据中,我在3个不同的时间点测量了850个图。 我可以使用r和素食包函数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

其中distance1是从时间1到2的距离,distance2是从时间2到3的距离,distance3是从时间1到时间3的距离。

是否有一种从距离对象中提取此信息的相对简单的方法?

1 个答案:

答案 0 :(得分:0)

解决这个问题的最简单方法可能是通过绘图分割数据,然后对每个绘图的三个值运行vegdist

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

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