修改聚合函数以在植被分析中工作的解决方案 table

A solution to modify the aggregate function to work in vegetation analysis table

我正在处理一个植被指标数据集,我已经成功地使用聚合函数来获取每个站点的信息。例如我用

aggregate(Tree ~ ID, data=Calc_height_treesVI, FUN=mean)

从一个地块位置 ("ID") 内的一组子地块中获取平均树高 ("Tree")。因为每个地块有超过 10,000 条线和可变数量的高度,所以创建一个具有每个地块位置的平均树高的新对象很有用。

现在我想做同样的事情以获得每棵树的胸高直径 (DBH) 测量值。因为许多树可能有不止一根树干,所以每个个体的 DBH 条目不止一个。有一个公式可以获取每个人的胸径。它涉及获得所有平方树干的总和的平方根。例如:

+------+----+-----+

|情节 |编号 |胸径 |

+------+----+-----+

| 1 |一个| 5.4 |

| 1 |一个 | 4 |

| 1 |一个 | 3.9 |

| 1 |一个| 3.7 |

| 1 |乙 | 4.3 |

| 1 |乙 | 3 |

| 1 |乙 | 3.5 |

+------+----+-----+

通过运行公式,你会得到物种A个体的DBH的DBH为8.60。因为有多个条目(具有可变数量的词干的个体)我想用 R 来做这个。但是我没有成功地直接应用适当的公式。我找到了一个解决方案,但它采取了多个步骤。这里我分享一下步骤:

DBH_individualsII$sqr <-(DBH_individualsII$DBH)^2 ##This squares each DBH and it creates the new column with that value "sqr"

DBH.add=aggregate(sqr~Id, data=DBH_individualsII, FUN=sum)##add the squared DBH by groups in this case the individual species

DBH.final=sqrt(DBH.sums.perind$sqr)##Make the final calculation by taking the square root of the added squared stems original DBHs

我的问题是,有没有更有效的方法?此外,是否有考虑到多茎胸径计算的植被分析包?到目前为止,我已经尝试通读 "vegan" 和 "ade4" 但没有成功,但也许我看起来不够努力。

感谢您的关注和耐心,希望这也能帮助其他人处理植被数据。

您可以在aggregate中指定一个匿名函数:

# Create some sample data
set.seed(1)
data <- data.frame(Id = rep(1:4,each=4), DBH = sample(1:16))

# Run aggregate with anonymous function
aggregate(DBH ~ Id, data=data, FUN=function(x) sqrt(sum(x^2)))

  Id      DBH
1  1 16.91153
2  2 21.33073
3  3 15.81139
4  4 22.47221