在已安排的组上使用 mutate() - 不会准确地对每个组进行 cumsum()
Using mutate() on groups which have been arranged - Will not cumsum() each group accurately
在 R 中工作。我有一个大型的树木数据集,这些数据集按林分和林分内的地块组织。我需要将每个地块中的树木按大小(DBH)降序排列,然后找到每个地块的断面面积(横截面积)的cumsum()
。关键是要获得一块地块中所有较大树木的基础面积的累积总和。
当我 运行 分组并排列并打印出正确排列的小标题时,但是一旦我尝试 运行 对其进行变异,我就不知道下面发生了什么引擎盖,因为计算的值似乎完全随机。
该函数应按林分内的地块创建组,按每个林分的 DBH 降序排列,然后在每个地块内找到 cumsum(BA)
减去其自身的 BA cumsum(BA)-BA
。为什么当我到达脚本的 mutate()
部分时出现此故障!它一直让我发疯。我在 base 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
在 R 中工作。我有一个大型的树木数据集,这些数据集按林分和林分内的地块组织。我需要将每个地块中的树木按大小(DBH)降序排列,然后找到每个地块的断面面积(横截面积)的cumsum()
。关键是要获得一块地块中所有较大树木的基础面积的累积总和。
当我 运行 分组并排列并打印出正确排列的小标题时,但是一旦我尝试 运行 对其进行变异,我就不知道下面发生了什么引擎盖,因为计算的值似乎完全随机。
该函数应按林分内的地块创建组,按每个林分的 DBH 降序排列,然后在每个地块内找到 cumsum(BA)
减去其自身的 BA cumsum(BA)-BA
。为什么当我到达脚本的 mutate()
部分时出现此故障!它一直让我发疯。我在 base 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