我有数据框:

    structure(list(Loc_name = c("U3R", "U3R", "U3R", "U3R", "U3R", 
"U3R", "HWY301", "HWY301", "HWY301", "HWY301", "HWY301", "HWY301", 
"U3R", "U3R", "U3R", "U3R", "U3R", "U3R", "HWY301", "HWY301", 
"HWY301", "HWY301", "HWY301", "HWY301"), `fish type` = c("bass", 
"bass", "bass", "catfish", "catfish", "catfish", "flathead", 
"flathead", "flathead", "bass", "bass", "bass", "bass", "bass", 
"bass", "catfish", "catfish", "catfish", "flathead", "flathead", 
"flathead", "bass", "bass", "bass"), Report_result_value = c(1.1, 
1.2, 1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3, 1.1, 1.2, 
1.3, 2.1, 2.2, 2.3, 3.1, 3.2, 3.3, 4.1, 4.2, 4.3), Chemical_Name = c("Cs-137", 
"Cs-137", "Cs-137", "Cs-137", "Cs-137", "Cs-137", "Cs-137", "Cs-137", 
"Cs-137", "Cs-137", "Cs-137", "Cs-137", "SR-90", "SR-90", "SR-90", 
"SR-90", "SR-90", "SR-90", "SR-90", "SR-90", "SR-90", "SR-90", 
"SR-90", "SR-90"), detect_flag = c("Y", "Y", "Y", "N", "Y", "N", 
"N", "N", "N", "Y", "N", "N", "Y", "Y", "Y", "N", "Y", "N", "N", 
"N", "N", "Y", "N", "N")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -24L))

我想要获得特定化学物质在特定位置、特定鱼类中的平均报告结果值.取平均值的规则是:如果特定鱼类类型、特定位置、特定化学名称的检测标志为"N",则平均值为零.否则,无论检测标志如何,平均值都是直方平均值.例如,在HWY301,鱼类"黄头鱼"的SR-90的平均值为0.相反,在HWY301,鱼类"bass"的Cs-137平均含量为4.2.

我听说循环在R中很慢,所以我尽量避免使用循环.考虑到高于平均值的规则,有没有人在R中有计算平均值的方法?非常感谢.

我已经try 了Aggregate和dplyr的汇总函数,但我无法使用这些方法来适应平均规则.我对R还是个新手.

推荐答案

基于以下注释:"必须至少有一个DETECT_FLAG=‘Y’才能正常计算平均值,否则为0":

fish_data %>% 
  group_by(Loc_name, `fish type`, Chemical_Name) %>% 
  summarise(meanVal = ifelse("Y" %in% detect_flag, 
                             mean(Report_result_value), 
                             0)) %>% 
  ungroup()

结果:

# A tibble: 8 × 4
  Loc_name `fish type` Chemical_Name meanVal
  <chr>    <chr>       <chr>           <dbl>
1 HWY301   bass        Cs-137            4.2
2 HWY301   bass        SR-90             4.2
3 HWY301   flathead    Cs-137            0  
4 HWY301   flathead    SR-90             0  
5 U3R      bass        Cs-137            1.2
6 U3R      bass        SR-90             1.2
7 U3R      catfish     Cs-137            2.2
8 U3R      catfish     SR-90             2.2

R相关问答推荐

逐行替代引用前一行的for循环

有没有方法将琴弦完全捕捉到R中的多边形?

如何创建构成多个独立列条目列表的收件箱框列?

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

隐藏e_mark_line的工具提示

通过使用str_detect对具有相似字符串的组进行分组

如何使用按钮切换轨迹?

当我们有多个特殊字符时,使用gsub删除名称和代码'

如何在所有绘图中保持条件值的 colored颜色 相同?

如何得到每四个元素向量R?

在嵌套列表中查找元素路径的最佳方法

如何写商,水平线,在一个单元格的表在R

使用data.table::fcase()而不是dplyr::case_When()时保持值

R spatstat Minkowski Sum()返回多个边界

有没有办法使用ggText,<;Sub>;&;<;sup>;将上标和下标添加到同一元素?

QY数据的处理:如何定义QY因素的水平

从R中发出的咕噜声中的BUG?

在散点图中使用geom_point放置线图例

填充图例什么时候会有点?

Broom.Mixed::Augment不适用于Sample::分析