R 计算跨数据帧固定起点的递减滚动百分比

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

我下面有一个数据框,想添加一个名为“百分比”的列。

按每笔交易排序

在 CofQYr == 0 行中,百分比将是所有列的行总和(从 2014 年 5o 2024 年开始)除以行总和,其中 CofQYr == “总计”(从 2014 年 5o 2024 年开始)

在 CofQ Yr == 1 行中,所有列的行总和(从 2014 年 5o 2023 年开始)除以行总和,其中 CofQYr == “总计”(从 2014 年 5o 2023 年开始)

在 CofQ Yr == 9 行中,所有列的行总和(从 2014 年开始)除以行总和,其中 CofQYr == “总计”仅适用于 2014 年)

所以 CofQYR=1 中 306A 的百分比值 = 0.0134

structure(list(TRADE = c("306A", "306A", "306A", "306A", "306A", 
"306A", "306A", "306A", "306A", "306A", "306A", "306A", "306A", 
"307A", "307A", "307A", "307A", "307A", "307A", "307A", "307A", 
"307A", "307A", "307A", "307A", "307A", "308A", "308A", "308A", 
"308A", "308A", "308A", "308A", "308A", "308A", "308A", "308A", 
"308A", "308A", "308R", "308R", "308R", "308R", "308R", "308R", 
"308R", "308R", "308R", "308R", "308R", "308R", "309A", "309A", 
"309A", "309A", "309A", "309A", "309A", "309A", "309A", "309A", 
"309A", "309A", "309A", "309C", "309C", "309C", "309C", "309C", 
"309C", "309C", "309C", "309C", "309C", "313A", "313A", "313A", 
"313A", "313A", "313A", "313A", "313A", "313A", "313A", "313A", 
"313A", "313A", "313D", "313D", "313D", "313D", "313D", "313D", 
"313D", "313D", "313D", "313D", "313D", "313D", "339A", "339A", 
"339A", "339A", "339A", "339A", "339A", "339A", "339A", "339A", 
"339A", "339A", "339B", "339B", "339B", "339B", "339B", "339B", 
"339B", "339B", "339C", "339C", "339C", "339C", "339C", "339C", 
"339C", "427A", "427A", "427A", "427A", "427A", "427A", "427A", 
"427A", "427A", "427A", "427A"), CofQYr = c("0", "1", "10", "2", 
"3", "4", "5", "6", "7", "8", "9", "99999", "Total", "0", "1", 
"10", "2", "3", "4", "5", "6", "7", "8", "9", "99999", "Total", 
"0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9", "99999", 
"Total", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "99999", 
"Total", "0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9", 
"99999", "Total", "0", "1", "2", "3", "4", "5", "6", "8", "99999", 
"Total", "0", "1", "10", "2", "3", "4", "5", "6", "7", "8", "9", 
"99999", "Total", "0", "1", "2", "3", "4", "5", "6", "7", "8", 
"9", "99999", "Total", "0", "1", "2", "3", "4", "5", "6", "7", 
"8", "9", "99999", "Total", "0", "1", "2", "3", "4", "5", "99999", 
"Total", "0", "1", "2", "3", "4", "99999", "Total", "0", "1", 
"10", "2", "3", "4", "5", "6", "7", "99999", "Total"), `2014` = c(77L, 
60L, 2L, 80L, 136L, 248L, 105L, 55L, 55L, 36L, 5L, 510L, 1369L, 
3L, 4L, 1L, 2L, 8L, 27L, 22L, 16L, 9L, 7L, 5L, 92L, 196L, 31L, 
22L, 1L, 19L, 28L, 48L, 48L, 29L, 19L, 10L, 7L, 205L, 467L, 1L, 
4L, 3L, 2L, 1L, 0L, 0L, 0L, 1L, 1L, 24L, 37L, 216L, 214L, 5L, 
213L, 360L, 709L, 321L, 152L, 145L, 88L, 68L, 993L, 3484L, 1L, 
1L, 0L, 3L, 0L, 0L, 0L, 0L, 18L, 23L, 26L, 29L, 4L, 29L, 38L, 
99L, 65L, 18L, 16L, 13L, 7L, 194L, 538L, 6L, 7L, 23L, 24L, 4L, 
3L, 3L, 0L, 4L, 2L, 76L, 152L, 4L, 9L, 44L, 30L, 14L, 5L, 1L, 
2L, 0L, 1L, 32L, 142L, 3L, 9L, 12L, 0L, 0L, 0L, 12L, 36L, 0L, 
3L, 7L, 1L, 2L, 9L, 22L, 1L, 2L, 1L, 5L, 15L, 51L, 13L, 6L, 6L, 
51L, 151L), `2015` = c(46L, 30L, 0L, 45L, 113L, 175L, 98L, 83L, 
57L, 20L, 6L, 484L, 1157L, 1L, 2L, 0L, 3L, 7L, 22L, 17L, 15L, 
8L, 5L, 0L, 75L, 155L, 15L, 8L, 0L, 17L, 39L, 45L, 34L, 38L, 
14L, 11L, 1L, 195L, 417L, 2L, 2L, 4L, 2L, 0L, 0L, 1L, 0L, 0L, 
0L, 37L, 48L, 156L, 143L, 0L, 154L, 314L, 476L, 290L, 250L, 131L, 
60L, 11L, 961L, 2946L, 1L, 2L, 1L, 2L, 0L, 0L, 2L, 0L, 34L, 42L, 
23L, 19L, 0L, 17L, 49L, 85L, 66L, 38L, 19L, 12L, 0L, 162L, 490L, 
8L, 7L, 24L, 29L, 8L, 0L, 2L, 2L, 1L, 1L, 79L, 161L, 3L, 9L, 
34L, 40L, 9L, 2L, 3L, 0L, 2L, 0L, 43L, 145L, 0L, 8L, 7L, 5L, 
0L, 0L, 12L, 32L, 0L, 6L, 1L, 0L, 0L, 3L, 10L, 3L, 6L, 0L, 2L, 
12L, 27L, 22L, 10L, 5L, 37L, 124L), `2016` = c(30L, 40L, 0L, 
40L, 60L, 135L, 168L, 91L, 51L, 9L, 0L, 555L, 1179L, 0L, 1L, 
0L, 1L, 5L, 16L, 21L, 14L, 9L, 3L, 0L, 71L, 141L, 16L, 4L, 0L, 
18L, 8L, 36L, 80L, 42L, 15L, 3L, 0L, 193L, 415L, 2L, 4L, 3L, 
1L, 0L, 1L, 2L, 1L, 0L, 0L, 38L, 52L, 109L, 87L, 0L, 95L, 141L, 
369L, 501L, 299L, 108L, 15L, 0L, 924L, 2648L, 0L, 1L, 3L, 0L, 
0L, 1L, 1L, 1L, 23L, 30L, 12L, 19L, 0L, 8L, 12L, 51L, 96L, 44L, 
20L, 2L, 0L, 212L, 476L, 7L, 11L, 28L, 25L, 5L, 8L, 4L, 2L, 1L, 
0L, 103L, 194L, 1L, 8L, 16L, 20L, 6L, 5L, 2L, 1L, 0L, 0L, 36L, 
95L, 1L, 12L, 12L, 0L, 0L, 0L, 2L, 27L, 2L, 3L, 4L, 0L, 0L, 7L, 
16L, 0L, 3L, 0L, 2L, 6L, 40L, 21L, 9L, 4L, 34L, 119L), `2017` = c(25L, 
18L, 0L, 12L, 46L, 200L, 176L, 67L, 15L, 0L, 0L, 550L, 1109L, 
0L, 1L, 0L, 0L, 3L, 6L, 32L, 15L, 7L, 0L, 0L, 73L, 137L, 4L, 
9L, 0L, 9L, 14L, 66L, 95L, 47L, 5L, 0L, 0L, 257L, 506L, 2L, 6L, 
2L, 1L, 4L, 0L, 0L, 0L, 0L, 0L, 54L, 69L, 52L, 75L, 0L, 60L, 
109L, 528L, 480L, 207L, 29L, 0L, 0L, 1054L, 2594L, 1L, 0L, 0L, 
0L, 0L, 3L, 0L, 0L, 24L, 28L, 13L, 9L, 0L, 9L, 23L, 65L, 80L, 
67L, 5L, 0L, 0L, 203L, 474L, 4L, 10L, 12L, 13L, 14L, 16L, 6L, 
0L, 0L, 0L, 118L, 193L, 2L, 5L, 30L, 35L, 10L, 6L, 1L, 0L, 0L, 
0L, 25L, 114L, 0L, 20L, 12L, 1L, 0L, 0L, 6L, 39L, 3L, 1L, 0L, 
0L, 0L, 4L, 8L, 0L, 3L, 0L, 4L, 9L, 26L, 14L, 9L, 4L, 66L, 135L
), `2018` = c(15L, 7L, 0L, 13L, 70L, 158L, 178L, 27L, 0L, 0L, 
0L, 705L, 1173L, 4L, 2L, 0L, 1L, 5L, 16L, 45L, 3L, 0L, 0L, 0L, 
114L, 190L, 3L, 2L, 0L, 5L, 24L, 71L, 82L, 16L, 0L, 0L, 0L, 333L, 
536L, 2L, 2L, 1L, 3L, 3L, 4L, 1L, 0L, 0L, 0L, 47L, 63L, 50L, 
34L, 0L, 41L, 164L, 589L, 486L, 70L, 0L, 0L, 0L, 1286L, 2720L, 
2L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 28L, 33L, 8L, 4L, 0L, 5L, 24L, 
77L, 108L, 9L, 0L, 0L, 0L, 271L, 506L, 3L, 3L, 5L, 17L, 22L, 
10L, 3L, 0L, 0L, 0L, 126L, 189L, 1L, 2L, 31L, 29L, 15L, 2L, 1L, 
0L, 0L, 0L, 48L, 129L, 6L, 17L, 20L, 1L, 2L, 0L, 3L, 49L, 8L, 
1L, 0L, 1L, 0L, 8L, 18L, 1L, 3L, 0L, 1L, 14L, 71L, 34L, 8L, 0L, 
104L, 236L), `2019` = c(8L, 4L, 0L, 19L, 89L, 217L, 73L, 0L, 
0L, 0L, 0L, 1081L, 1491L, 1L, 2L, 0L, 1L, 3L, 18L, 7L, 0L, 0L, 
0L, 0L, 135L, 167L, 2L, 1L, 0L, 9L, 45L, 84L, 27L, 0L, 0L, 0L, 
0L, 473L, 641L, 0L, 0L, 2L, 5L, 1L, 1L, 0L, 0L, 0L, 0L, 40L, 
49L, 15L, 26L, 0L, 54L, 170L, 628L, 181L, 0L, 0L, 0L, 0L, 2063L, 
3137L, 1L, 2L, 1L, 0L, 1L, 0L, 0L, 0L, 14L, 19L, 7L, 1L, 0L, 
17L, 27L, 106L, 31L, 0L, 0L, 0L, 0L, 431L, 620L, 3L, 5L, 18L, 
62L, 27L, 4L, 0L, 0L, 0L, 0L, 221L, 340L, 1L, 2L, 30L, 43L, 16L, 
2L, 0L, 0L, 0L, 0L, 43L, 137L, 1L, 25L, 29L, 3L, 0L, 1L, 11L, 
70L, 7L, 1L, 1L, 0L, 0L, 8L, 17L, 0L, 1L, 0L, 3L, 8L, 63L, 14L, 
0L, 0L, 110L, 199L), `2020` = c(3L, 4L, 0L, 14L, 50L, 38L, 0L, 
0L, 0L, 0L, 0L, 791L, 900L, 0L, 0L, 0L, 0L, 4L, 1L, 0L, 0L, 0L, 
0L, 0L, 85L, 90L, 1L, 0L, 0L, 2L, 14L, 9L, 0L, 0L, 0L, 0L, 0L, 
322L, 348L, 2L, 1L, 2L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 28L, 35L, 
10L, 22L, 0L, 45L, 126L, 110L, 0L, 0L, 0L, 0L, 0L, 1742L, 2055L, 
0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 11L, 13L, 0L, 4L, 0L, 5L, 22L, 
15L, 0L, 0L, 0L, 0L, 0L, 313L, 359L, 0L, 8L, 25L, 17L, 6L, 0L, 
0L, 0L, 0L, 0L, 119L, 175L, 0L, 1L, 20L, 42L, 4L, 0L, 0L, 0L, 
0L, 0L, 38L, 105L, 5L, 20L, 36L, 4L, 0L, 0L, 10L, 75L, 1L, 2L, 
0L, 0L, 0L, 4L, 7L, 0L, 0L, 0L, 0L, 5L, 6L, 0L, 0L, 0L, 131L, 
142L), `2021` = c(2L, 6L, 0L, 15L, 14L, 0L, 0L, 0L, 0L, 0L, 0L, 
1455L, 1492L, 0L, 0L, 0L, 3L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 246L, 
252L, 2L, 2L, 0L, 2L, 5L, 0L, 0L, 0L, 0L, 0L, 0L, 527L, 538L, 
0L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 31L, 34L, 15L, 17L, 0L, 
47L, 25L, 0L, 0L, 0L, 0L, 0L, 0L, 2854L, 2958L, 4L, 0L, 2L, 0L, 
0L, 0L, 0L, 0L, 35L, 41L, 0L, 0L, 0L, 6L, 10L, 0L, 0L, 0L, 0L, 
0L, 0L, 469L, 485L, 3L, 22L, 32L, 9L, 0L, 0L, 0L, 0L, 0L, 0L, 
183L, 249L, 3L, 3L, 13L, 16L, 0L, 0L, 0L, 0L, 0L, 0L, 95L, 130L, 
7L, 12L, 55L, 1L, 0L, 0L, 26L, 101L, 3L, 8L, 0L, 0L, 0L, 4L, 
15L, 0L, 1L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 226L, 230L), `2022` = c(1L, 
3L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1588L, 1594L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 190L, 192L, 1L, 1L, 0L, 3L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 451L, 456L, 0L, 4L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 40L, 44L, 12L, 14L, 0L, 9L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 3091L, 3126L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 39L, 42L, 
0L, 1L, 0L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 478L, 482L, 4L, 29L, 
15L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 237L, 285L, 5L, 2L, 3L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 116L, 126L, 2L, 12L, 14L, 0L, 0L, 0L, 
25L, 53L, 3L, 1L, 0L, 0L, 0L, 5L, 9L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 121L, 121L), `2023` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1400L, 1400L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 158L, 158L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 587L, 587L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 43L, 
44L, 6L, 11L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3234L, 3251L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 15L, 15L, 1L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 613L, 615L, 8L, 6L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 271L, 285L, 3L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
107L, 110L, 0L, 2L, 0L, 0L, 0L, 0L, 27L, 29L, 4L, 3L, 0L, 0L, 
0L, 2L, 9L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 311L, 311L), 
    `2024` = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1197L, 
    1197L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 150L, 
    150L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 464L, 464L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 29L, 29L, 1L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2925L, 2926L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 14L, 14L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 519L, 519L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 244L, 244L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 84L, 84L, 0L, 0L, 0L, 0L, 0L, 0L, 14L, 14L, 1L, 0L, 0L, 
    0L, 0L, 10L, 11L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 283L, 
    283L)), row.names = c(NA, -137L), class = c("tbl_df", "tbl", 
"data.frame"))
r math rolling-computation
1个回答
0
投票

我可能误解了这里的目标,但下面的方法将 2014:2023 列中的每一行值相加,然后对于每个 TRADE|CofQYr 行,显示该行的总和与相应行的比率,其中 CofQYr 为“总计。”

library(tidyverse)
df |>
  pivot_longer(-c(1:2)) |>
  summarize(value = sum(value), .by = c(TRADE, CofQYr)) |>
  arrange(TRADE, as.numeric(CofQYr)) |>
  mutate(pct = value / sum(value[CofQYr == "Total"]), .by = TRADE)

结果(前 20 行)

   TRADE CofQYr value      pct
   <chr> <chr>  <int>    <dbl>
 1 306A  0        207 0.0147  
 2 306A  1        172 0.0122  
 3 306A  2        240 0.0171  
 4 306A  3        578 0.0411  
 5 306A  4       1171 0.0833  
 6 306A  5        798 0.0568  
 7 306A  6        323 0.0230  
 8 306A  7        178 0.0127  
 9 306A  8         65 0.00462 
10 306A  9         11 0.000782
11 306A  10         2 0.000142
12 306A  99999  10316 0.734   
13 306A  Total  14061 1       
14 307A  0         10 0.00547 
15 307A  1         13 0.00711 
16 307A  2         11 0.00602 
17 307A  3         38 0.0208  
18 307A  4        106 0.0580  
19 307A  5        144 0.0788  
20 307A  6         63 0.0345 
...
© www.soinside.com 2019 - 2024. All rights reserved.