You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于分组DataFrame用dplyr和ecdf计算流量值的百分位数

解决方案

你可以通过按站点分组生成ECDF函数,再将其与df1关联计算每个Flow值的百分位数,具体步骤如下:

1. 加载所需包

确保安装并加载dplyr和purrr(用于处理列表与映射操作):

library(dplyr)
library(purrr)

2. 生成各站点的ECDF函数

从df2中按站点提取流量序列,为每个站点创建对应的经验累积分布函数(ECDF):

site_ecdf <- df2 %>%
  group_by(Site_ID) %>%
  summarise(ecdf_function = list(ecdf(Flow)))

3. 关联df1并计算百分位数

将生成的ECDF函数与df1按站点关联,遍历每个Flow值代入对应站点的ECDF函数,得到百分位数(乘以100转换为百分比形式):

final_result <- df1 %>%
  left_join(site_ecdf, by = "Site_ID") %>%
  mutate(
    Percentile = map2_dbl(Flow, ecdf_function, ~ .y(.x) * 100)
  ) %>%
  select(-ecdf_function) # 移除临时函数列

代码说明

  • ecdf(Flow)生成的函数,输入某个Flow值时会返回该值在对应站点流量序列中的累积概率(范围0-1);
  • map2_dbl用于逐行匹配df1的Flow值和对应站点的ECDF函数,批量计算结果并返回数值向量;
  • 最终结果保留df1所有原始列,新增Percentile列表示该Flow值在对应站点流量序列中的百分位数。

示例输出

运行代码后,final_result的结构示例如下:

# A tibble: 9 × 4
  Event Site_ID  Flow Percentile
  <chr> <chr>   <dbl>      <dbl>
1 1     a        2.12       60.0
2 2     a        1.89       45.0
3 3     a        2.56       80.0
4 4     b        1.72       30.0
...

内容的提问来源于stack exchange,提问作者James White

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:13