我正在尝试进行分析,我需要知道使用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的距离。
是否有一种从距离对象中提取此信息的相对简单的方法?
答案 0 :(得分:0)
解决这个问题的最简单方法可能是通过绘图分割数据,然后对每个绘图的三个值运行vegdist
。
require(plyr)
require(vegan)
ddply(example, .(plot), function(x)as.vector(vegdist(x[,-1])))
你可能应该有一个时间栏。您可以使用它来对数据进行排序,以确保第一列距离始终表示相同的时间。