首页 > 解决方案 > 使用列表查找列表在第二个列表列表中查找高于阈值的值并量化它们

问题描述

我有一个问题是我之前提出的问题的扩展使用嵌套查找表在第二个表中查找高于阈值的值并在 R 中量化它们这次我有一个带有数据框的列表列表。我正在用 R 语言分析河流流量数据,我有两个列表。首先保存来自不同河流河段的两个不同预测(Flowtest1 和 Flowtest2)的数据(Flowtest_all),称为 910 和 950 等数字。我每天有数百个流量测量值(Flow)。

Flowtest1 <- list("910" = tibble(Flow=c(123, 170, 187, 245, 679, 870, 820)),
                 "950" = tibble(Flow=c(570, 450, 780, 650, 230, 470, 340)))
Flowtest2 <- list("910" = tibble(Flow=c(167, 125, 287, 345, 570, 789, 825)),
                 "950" = tibble(Flow=c(573, 427, 717, 682, 237, 510, 376)))
Flowtest_all <- list(Flowtest1, Flowtest2)

第二个列表称为 RCH_all 用作查找表,它还包含来自两个不同投影(RCH1 和 RCH2)的数据。我在与 Flowtest_all 不同的流量数据集上计算了 0.75% 百分位 (Q3) 的值(所以我不想使用为 Flowtest_all 计算的 Q3)。Flowtest_all 和 RCH_all 中分析的年份和河流范围相同。

RCH1 <- list("910" = data.frame( Q3=650),
                "950" = data.frame(Q3=550))
RCH2 <- list("910" = data.frame(Q3=670),
                "950" = data.frame(Q3= 570))
RCH_all <- list(RCH1, RCH2)

我想获得的是来自 Flowtest_all 的流量值的数量,该数量低于每个子流域的 RCH_all 中匹配 Q3 中指定的阈值。我想获得一个看起来像Result_all <- list (Resulttest1, Resulttest2) Where 的结果:

Resulttest1 <- list("910" = data.frame( aboveQ3=3),
                  "950" = data.frame( aboveQ3=3))
Resulttest2 <- list("910" = data.frame( aboveQ3=2),
                  "950" = data.frame( aboveQ3=3))

我尝试了下面的代码,但它产生了一个错误:

test <- Map(function(x, y) aggregate( Flow > Q3, merge(x, y, all = TRUE, na.action = 'na.pass'), sum, na.rm = TRUE, na.action = 'na.pass'), Flowtest_all, RCH_all)

错误:

聚合错误(Flow > Q3,merge(x,y,all = TRUE,na.action = “na.pass”),:找不到对象“Flow”

请帮忙!

标签: rlist

解决方案


虽然我没有完全掌握您在分析方面的要求,但我首先会对您的(示例)数据执行以下操作。

> library(dplyr) 
> FT <- bind_rows(list("Flowtest1" = bind_rows(Flowtest1, .id = "id"), 
                     "Flowtest2" = bind_rows(Flowtest2, .id = "id")), .id = "FlowTest") 

> head(FT)
# A tibble: 6 x 3
  FlowTest  id     Flow
  <chr>     <chr> <dbl>
1 Flowtest1 910     123
2 Flowtest1 910     170
3 Flowtest1 910     187
4 Flowtest1 910     245
5 Flowtest1 910     679
6 Flowtest1 910     870

一旦数据以这种方式结束,我才会应用必要的阈值并查找相应的数据组(由“FlowTest”和“id”列定义)。


推荐阅读