修改聚合函数以在植被分析中工作的解决方案 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
我正在处理一个植被指标数据集,我已经成功地使用聚合函数来获取每个站点的信息。例如我用
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