计算单独分组数据帧中值的百分位数

问题描述 投票:0回答:1

我有两个数据帧,一个(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 中相应站点的完整时间序列的百分位值。任何帮助将非常感激。谢谢。

r dplyr percentile ecdf
1个回答
0
投票

这是使用

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
© www.soinside.com 2019 - 2024. All rights reserved.