如何解决在已安排的组上使用 mutate() - 不会准确地 cumsum() 每个组
在 R 工作。我有一个大型的树木数据集,这些数据集按林分和林分内的地块进行组织。我需要按大小(DBH)按降序组织每个地块中的树,然后在每个地块中找到基础面积(横截面积)的cumsum()
。关键是要获得一个地块中所有较大树木的基础面积的累积总和。
当我运行 group by 并排列并打印出 tibble 时,它被正确排列,但是一旦我尝试在它上面运行 mutate,我不知道引擎盖下发生了什么,因为计算的值似乎完全随机。
该函数应按一个林地内的地块创建组,按每个林地中的 DBH 以降序排列,然后在每个地块中找到 cumsum(BA)
减去它自己的 BA cumsum(BA)-BA
。为什么当我到达脚本的 mutate()
部分时会出现这种故障!它一直让我发疯。我在基础 R 中尝试了一些东西,也无法解决。任何帮助是极大的赞赏。这看起来应该很容易,而不是把我逼到墙角!
BA.Larger.Trees <- function(Stand,Plot,Tree,DBH,BA) {
Temp <- tibble(Stand,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,2,2)
Plot <- c(1,2)
Tree <- c(1,3,3)
DBH <- c(4,12,6,11,16,13)
BA <- c(.04,.12,.06,.11,.01,.03,.02,.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,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。