【问题标题】:Using a lookup list of lists to find values above thresholds in second list of lists and quantify them使用列表查找列表在第二个列表列表中查找高于阈值的值并量化它们
【发布时间】:2020-11-18 12:30:53
【问题描述】:

我有一个问题是我之前提出的问题的延伸Using a nested lookup table to find values above thresholds in second table and quantify them in 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 &lt;- list (Resulttest1, Resulttest2) 的结果 地点:

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)

错误:

聚合错误(流 > Q3,合并(x,y,所有 = TRUE,na.action = "na.pass"), : 找不到对象“流”

请帮忙!

【问题讨论】:

    标签: r list


    【解决方案1】:

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

    > 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”列定义)。

    【讨论】:

    • 谢谢,这很有帮助!使用数据框比使用列表更有信心,而且我能够按照自己的方式工作以达到预期的结果。
    • @JoannaOK - 不客气;我最初的猜测是,帮助重新排列,您提供的数据将有利于您以后的分析,这似乎是正确的,与我的期望相同,即您足够聪明,可以自己采取最后的步骤;-)
    猜你喜欢
    • 2021-02-11
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2011-06-15
    相关资源
    最近更新 更多