r语言 - 对已排列的组使用mutate() -将不能准确地对每个组求和



在r中工作,我有一个大型的树木数据集,这些数据集是按林分和林分内的地块组织的。我需要将每个地块内的树木按大小(DBH)降序组织,然后求出每个地块基底面积(横截面积)的cumsum()。关键是要得到一个地块中所有较大树木的基底面积的累积和。

当我运行group by并排列并打印出tibble时,它被正确排列,但是一旦我尝试在它上运行mutate,我就不知道下面发生了什么,因为计算的值似乎完全随机。

该函数应在一个林分内按地块分组,按每个林分的DBH按desc顺序排序,然后求每个林分内的cumsum(BA)减去其自身的BA cumsum(BA)-BA。为什么当我到达脚本的mutate()部分时出现故障!这快把我逼疯了。我尝试了一些以R为底的东西,但也不能把它整理出来。非常感谢任何帮助。这看起来应该很容易,不会把我逼上绝路!

BA.Larger.Trees <- function(Stand, Plot, Tree, DBH, BA) {
  Temp <- tibble(Stand, Plot, Tree, DBH, BA)
  Temp <- Temp %>%
    group_by(Plot, Stand) %>%
    arrange(desc(DBH), .by_group = TRUE) %>% 
    mutate(
      X = (cumsum(BA) - BA))
    )
  return(Temp$X)
  }

下面是一些示例数据:

Stand <- c(1,1,1,1,1,1,2,2,2,2,2,2)
Plot  <- c(1,1,1,2,2,2,1,1,1,2,2,2)
Tree  <- c(1,2,3,1,2,3,1,2,3,1,2,3)
DBH   <- c(4, 12, 6, 11, 12, 6, 1, 3, 2, 12, 16, 13)
BA    <- c(.04, .12, .06, .11, .12, .06, .01, .03, .02, .12, .16, .13)

您可以在函数中传递tibble而不是传递单个向量。试一试:

library(dplyr)
BA.Larger.Trees <- function(data) {
  data %>%
    arrange(Stand, Plot, desc(BA)) %>%
    group_by(Stand, Plot) %>%
    mutate(X = cumsum(BA) - BA)
}
Temp <- tibble(Stand, Plot, Tree, DBH, BA)
result <- BA.Larger.Trees(Temp)
result$X
#[1] 0.00 0.12 0.18 0.00 0.12 0.23 0.00 0.03 0.05 0.00 0.16 0.29

最新更新