r - 按组对大于当前值的值求和

标签 r

我测量了不同地 block 中树木的基础面积。这是一个小例子,有两个地 block ,每个地 block 有 4 棵树:

Plot    Tree    BasalArea
1         1         4
1         2         5
1         3         7
1         4         3
2         1         4
2         2         6
2         3         9
2         4         5

在每个地 block 中,我想计算基础面积大于焦点树的树木的基础面积总和。

例如,地 block 1 中的树 1 的面积为 4。在该地 block 内,有 2 棵树的面积大于树 1:树 2 和树 3 的面积分别为 5 和 7。因此,树 1 的“BA_Larger”是 5 + 7 = 12。

同一地 block 中的树 2 的基础面积 = 5。在地 block 1 中,只有一棵树的面积大于树 2:树 3 的面积为 7。因此,树 2 的“BA_Larger”为 7。

最后,数据框应该是这样的:

Plot    Tree    BasalArea   BA_Larger
1         1        4          12
1         2        5           7
1         3        7           0
1         4        3          16
2         1        4          20
2         2        6           9
2         3        9           0
2         4        5          15

数据集非常大。我试图计算“BA_Larger”,但没有成功。非常感谢任何帮助。

最佳答案

使用 ave()base R 解决方案:

within(df, BA_Larger <- ave(BasalArea, Plot, FUN = function(x) sapply(x, function(y) sum(x[x > y]))))

使用 tidyverse 样式,您还可以使用 purrr 中的 map_int()map_dbl()

library(dplyr)
library(purrr)

df %>%
  group_by(Plot) %>%
  mutate(BA_Larger = map_int(BasalArea, ~ sum(BasalArea[BasalArea > .]))) %>%
  ungroup()

输出

# # A tibble: 8 x 4
#    Plot  Tree BasalArea BA_Larger
#   <int> <int>     <int>     <int>
# 1     1     1         4        12
# 2     1     2         5         7
# 3     1     3         7         0
# 4     1     4         3        16
# 5     2     1         4        20
# 6     2     2         6         9
# 7     2     3         9         0
# 8     2     4         5        15

数据

df <- structure(list(Plot = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), Tree = c(1L, 
2L, 3L, 4L, 1L, 2L, 3L, 4L), BasalArea = c(4L, 5L, 7L, 3L, 4L, 
6L, 9L, 5L)), class = "data.frame", row.names = c(NA, -8L))

关于r - 按组对大于当前值的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63543800/

相关文章:

r - dplyr::full_join 未按预期工作

r - 如何在R中按组对列进行排序

r visNetwork : How to highlight the nearest nodes when a group is selected

r - ggplot 中 plotly 缺失的图例

r - 使用 heatmap() 作为 ggsave() 的绘图输入时出错

r - 在 R 中计算 Hardy Weinberg 平衡——向量问题

r - 计算 R 中 col1 中每个不同值的 col2 中不同值的数量

r - 从同一数据框中另一列的值派生列

r - ggplot2:具有单个图例的单行中有多个图

r - 根据列条件对数据框进行排序