如何在R中按分组生成固定区间内的等间距数值
按月份分组生成等间距位置值的解决方案
原始数据集
df <- tribble( ~opp_id, ~month, ~count, "304956938","Oct 2023","2", "304956938","Oct 2023","2", "305075384","Nov 2023","1", "304910225","Dec 2023","2", "305101457","Dec 2023","2", "305005905","Feb 2024","1", "305089124","Mar 2024","3", "304955132","Mar 2024","3", "304955132","Mar 2024","3", "305005359","Jun 2024","2", "304904187","Jun 2024","2", "304973572","Aug 2024","1", "304984865","Sep 2024","1", )
需求说明
按month分组,在1-100区间内生成等间距的position值:
- 每组记录数为
k,则间隔值为100/(k+1) - 生成的位置值依次为
间隔值、2*间隔值、...、k*间隔值,比如:- 2条记录对应33.3、66.6
- 3条记录对应25、50、75
实现代码
使用dplyr的分组操作即可完成需求:
library(dplyr) df_with_position <- df %>% group_by(month) %>% mutate( interval = 100 / (n() + 1), position = seq(interval, 100 - interval, by = interval) ) %>% ungroup() %>% select(-interval) # 移除临时计算列,可选 # 查看结果 df_with_position
结果示例
部分输出如下,符合预期:
# A tibble: 13 × 4 opp_id month count position <chr> <chr> <chr> <dbl> 1 304956938 Oct 2023 2 33.3 2 304956938 Oct 2023 2 66.7 3 305075384 Nov 2023 1 50 4 304910225 Dec 2023 2 33.3 5 305101457 Dec 2023 2 66.7 6 305005905 Feb 2024 1 50 7 305089124 Mar 2024 3 25 8 304955132 Mar 2024 3 50 9 304955132 Mar 2024 3 75 10 305005359 Jun 2024 2 33.3 11 304904187 Jun 2024 2 66.7 12 304973572 Aug 2024 1 50 13 304984865 Sep 2024 1 50
内容的提问来源于stack exchange,提问作者Jianyang Tai
相关产品推荐
相关产品推荐

