如何解决使用嵌套的查找表在第二个表中查找高于阈值的值,并在R
我正在使用R语言分析河流流量数据,并且有两个嵌套列表。首先保存来自不同河段的数据(流量测试),称为910、950、1012和1087等数字。我有数百个每日流量测量值(流量),但是当我准备年度统计数据时,确切的日期和月份并不重要。 Flowtest表中的每个度量(流量)均以年份(年)为参考。
Flowtest <- list("910" = tibble(Year = c(2004,2004,2005,2007,2008,2008),Flow=c(123,170,187,245,679,870,820)),"950" = tibble(Year = c(2004,2006,Flow=c(570,450,780,650,230,470,340)),"1012" = tibble(Year = c(2005,Flow=c(160,670,350,840,850)),"1087" = tibble(Year = c(2004,Flow=c(120,820,580,840)))
第二个嵌套表称为RCHtest,用作查找表。我在与Flowtest不同的数据流数据集上计算了0.75%的百分比(Q3)的值(因此,我不想使用为Flowtest计算的Q3)。因此,对于每个所分析的年份(年),我都有一个0.75%百分位数阈值(Q3)的值。 Flowtest和RCHtest中的分析年和河段相同。
RCHtest <- list("910" = data.frame(Year = c(2004:2008),Q3=c(650,720,550,800)),"950" = data.frame(Year = c(2004:2008),Q3=c(550,770,520,540,790)),"1012" = data.frame(Year = c(2004:2008),Q3=c(600,500,570,"1087" = data.frame(Year = c(2004:2008),Q3=c(670,790,510,560,780)))
我想从Flowtest $ Flow中获得的值数量超过每个子流域每年RCHtest $ Q3中指定的阈值,如下所示Resulttest。
Resulttest <- list("910" = data.frame(Year = c(2004:2008),aboveQ3=c(0,1,2)),aboveQ3=c(1,0)),2,2)))
如何处理? 请帮忙
解决方法
您可以将Map
与aggregate
结合使用:
Map(function(x,y) aggregate(Flow > Q3~Year,merge(x,y,all = TRUE,na.action = 'na.pass'),sum,na.rm = TRUE,Flowtest,RCHtest)
这将返回:
#$`910`
# Year Flow > Q3
#1 2004 0
#2 2005 0
#3 2006 0
#4 2007 1
#5 2008 2
#$`950`
# Year Flow > Q3
#1 2004 1
#2 2005 1
#3 2006 0
#4 2007 0
#5 2008 0
#$`1012`
# Year Flow > Q3
#1 2004 0
#2 2005 0
#3 2006 0
#4 2007 0
#5 2008 2
#$`1087`
# Year Flow > Q3
#1 2004 0
#2 2005 1
#3 2006 0
#4 2007 2
#5 2008 2
如果您想使用tidyverse
函数来执行此操作,则可以执行以下操作:
library(dplyr)
library(purrr)
map2(Flowtest,RCHtest,~full_join(.x,.y) %>%
group_by(Year) %>%
summarise(sum = sum(Flow > Q3,na.rm = TRUE)))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。