我有两个数据帧,一个(df1)包含在不同站点观察到的特定事件的最小“流量”值。第二个数据帧 (df2) 包含完整的流雾系列。
df1 <- data.frame(Event = as.character(seq(1,9,1)),
Site_ID = rep(c("a","b","c"),each=3),
Flow = rnorm(9,2,1))
df2 <- data.frame(Site_ID = rep(c("a","b","c"),each=20),
Flow = rnorm(60,2,1))
我想使用 dplyr 遍历 df1 中的每个“流量”值,并使用 ecdf 计算其相对于 df2 中相应站点的完整时间序列的百分位值。任何帮助将非常感激。谢谢。
这是使用
group_split
和 map2
的方法:
library(tidyverse)
df1 %>%
mutate(quantile = map2(group_split(df1, Site_ID),
group_split(df2, Site_ID),
~ecdf(.y$Flow)(.x$Flow)) |> unlist())
#> Event Site_ID Flow quantile
#> 1 1 a 2.004936 0.55
#> 2 2 a 2.072371 0.55
#> 3 3 a 1.767891 0.45
#> 4 4 b 2.686329 0.70
#> 5 5 b 1.517909 0.30
#> 6 6 b 1.574355 0.35
#> 7 7 c 1.606521 0.30
#> 8 8 c 1.680232 0.30
#> 9 9 c 1.604164 0.30