【问题标题】:Weekly Weights Calculations in R Using dplyr使用 dplyr 在 R 中计算每周权重
【发布时间】:2021-01-08 01:41:26
【问题描述】:

我有以下数据,并希望在 R 中使用 dplyr 创建如下所示的“Final Col”。

请注意,“树木”主类别在 2017 年第 1 周的值为 0。在这种情况下,我希望这两个星期的最终值为 0。

我会很感激你的想法。

| Year  | Week    | MainCat|Qty    |Final Col     |
|:----: |:------: |:-----: |:-----:|:------------:|
| 2017  | 1       | Edible |69     |69/(69+12)    |
| 2017  | 2       | Edible |12     |12/(69+12)    |
| 2017  | 1       | Trees  |00     |00            |
| 2017  | 2       | Trees  |12     |00            |
| 2017  | 1       | Flowers|88     |88/(88+47)    |
| 2017  | 2       | Flowers|47     |47/(88+47)    |
| 2018  | 1       | Edible |90     |90/(90+35)    |
| 2018  | 2       | Edible |35     |35/(90+35)    |
| 2018  | 1       | Trees  |32     |32/(32+12)    |
| 2018  | 2       | Trees  |12     |12/(32+12)    |
| 2018  | 1       | Flowers|78     |78/(78+85)    |
| 2018  | 2       | Flowers|85     |85/(78+85)    |

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    为此,您可以结合使用 grou_by 和常规 if ... else 子句

    library(dplyr)
    set.seed(0)
    
    # dummy data
    data <- tidyr::expand_grid(year = 2017:2018,
                quarter = 1:2,
                MainCat = LETTERS[1:3]) %>% 
      mutate(Qty = sample(0:15, 3*2*2)) %>% 
      arrange(year, MainCat, quarter)
    
    data %>% 
      group_by(year, MainCat) %>% 
      mutate(finalCol = if(any(Qty == 0)){ 0 } else {Qty / sum(Qty)})
    #> # A tibble: 12 x 5
    #> # Groups:   year, MainCat [6]
    #>     year quarter MainCat   Qty finalCol
    #>    <int>   <int> <chr>   <int>    <dbl>
    #>  1  2017       1 A          13    0.684
    #>  2  2017       2 A           6    0.316
    #>  3  2017       1 B           8    0    
    #>  4  2017       2 B           0    0    
    #>  5  2017       1 C           3    0.75 
    #>  6  2017       2 C           1    0.25 
    #>  7  2018       1 A          12    0.632
    #>  8  2018       2 A           7    0.368
    #>  9  2018       1 B          10    0.476
    #> 10  2018       2 B          11    0.524
    #> 11  2018       1 C           2    0.333
    #> 12  2018       2 C           4    0.667
    

    【讨论】:

      猜你喜欢
      • 2021-10-01
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2015-06-17
      • 1970-01-01
      • 2018-08-05
      相关资源
      最近更新 更多