R 中聚合数据帧以根据“检测标志”获取组的平均值

问题描述 投票:0回答:1

我在 R 中有数据框“fish_type”(见图)
我想获得特定位置特定鱼类中特定化学物质的平均报告结果值。取平均值的规则是:如果对于特定鱼类类型、特定位置、特定化学名称,检测标志为“N”,则平均值为零。否则,平均值是直接平均值,无论检测标志如何。例如,HWY301 处“平头鱼”的 SR-90 平均值为 0。相反,HWY301 处“鲈鱼”的 Cs-137 平均值为 4.2。

我听说 R 中的循环很慢,所以我试图尽可能避免使用循环。考虑到上述平均规则,有人有 R 中计算平均值的方法吗?非常感谢。

我尝试过aggregate和dplyr的summary函数,但我无法用这些方法来适应平均规则。我对 R 还很陌生。

r dplyr aggregate summarize
1个回答
0
投票
library(dplyr)
df %>%
  summarize(mean = if_else(
    any(detect_flag == "Y"), 0, mean(result)),
            .by = c(loc, fish))

结果

  loc     fish mean
1   a     bass    0
2   b     bass    3
3   a flathead    0
4   b flathead    7

假数据(问题中包含的最佳实践)

df <- data.frame(loc = letters[1:2],
           fish = rep(c("bass", "flathead"), each = 4),
           result = 1:8,
           detect_flag = rep(c("N", "N", "Y", "N")))

  loc     fish result detect_flag
1   a     bass      1           N
2   b     bass      2           N
3   a     bass      3           Y
4   b     bass      4           N
5   a flathead      5           N
6   b flathead      6           N
7   a flathead      7           Y
8   b flathead      8           N
© www.soinside.com 2019 - 2024. All rights reserved.