使用嵌套查找表在第二个表中查找高于阈值的值,并在R中对其进行量化
我正在用R语言分析河流流量数据,我有两个嵌套列表。First保存来自不同河段的数据(流量测试),称为数字,如910、950、1012和1087。我每天有数百次流量测量(Flow),但在我准备年度统计数据时,准确的日期和月份并不重要。每个测量(流量)都参考流量测试表中的一年使用嵌套查找表在第二个表中查找高于阈值的值,并在R中对其进行量化,r,loops,nested,quantile,R,Loops,Nested,Quantile,我正在用R语言分析河流流量数据,我有两个嵌套列表。First保存来自不同河段的数据(流量测试),称为数字,如910、950、1012和1087。我每天有数百次流量测量(Flow),但在我准备年度统计数据时,准确的日期和月份并不重要。每个测量(流量)都参考流量测试表中的一年 Flowtest <- list("910" = tibble(Year = c(2004, 2004, 2005, 2005, 2007, 2008, 2008), Flow=c(123, 170,
Flowtest <- list("910" = tibble(Year = c(2004, 2004, 2005, 2005, 2007, 2008, 2008), Flow=c(123, 170, 187, 245, 679, 870, 820)),
"950" = tibble(Year = c(2004, 2005, 2005, 2005, 2006, 2008, 2008), Flow=c(570, 450, 780, 650, 230, 470, 340)),
"1012" = tibble(Year = c(2005, 2005, 2005, 2005, 2007, 2008, 2008), Flow=c(160, 170, 670, 780, 350, 840, 850)),
"1087" = tibble(Year = c(2004, 2005, 2005, 2007, 2007, 2008, 2008), Flow=c(120, 780, 820, 580, 870, 870, 840)))
Flowtest您可以将Map
与aggregate
组合使用:
Map(function(x, y) aggregate(Flow > Q3~Year, merge(x, y, all = TRUE,
na.action = 'na.pass'), sum, na.rm = TRUE, na.action = 'na.pass'),
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)))
#$`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
library(dplyr)
library(purrr)
map2(Flowtest, RCHtest, ~full_join(.x, .y) %>%
group_by(Year) %>%
summarise(sum = sum(Flow > Q3, na.rm = TRUE)))