【问题标题】:Cumulative sums of matrix columns with calculation带计算的矩阵列的累积和
【发布时间】:2016-09-21 15:19:30
【问题描述】:

我有一个如下所示的矩阵:

           date     1   2   3   4
          201601    2   4   6   1
          201602    3   7   7   4
          201603    4   8   9   6
          201604    6   4   5   7

Rows 表示 prod_Date 和列标题(1 到 4)的年龄。数字表示产品的销量。

我需要生成一个包含 PER YEAR 的数据框,即销售额的累计总和,并且我想将其乘以 Age/max(Age) 给出的“成熟度”因子 - 例如在本例中1/4 或 2/4。请注意,年龄可能会有所不同。 最终输出应如下所示:

     age    cum.sales   sales*maturity
     1           15         3.75
     2           38        19.00
     3           65        48.75
     4           83        83.00

关于如何快速完成的任何建议? 提前致谢

【问题讨论】:

    标签: r matrix cumsum


    【解决方案1】:

    假设初始数据集是data.frame(因为matrix 不能包含混合类,否则“日期”将是“数字”类。如果是数字类,则以下解决方案仍然有效)。从matrix/data.framemutate 的列名中创建一个以“年龄”为列的 data.frame 以创建“cum.sales”(通过获取没有“日期”列的数据集的列总和的累积总和) 和 'salesmaturity' 通过将 'cum.sales' 与 'age' 的分数乘以 max(age)

    library(dplyr)
    d1 <- data.frame(age = as.numeric(colnames(df1)[-1])) 
    d1 %>% 
        mutate(cum.sales = cumsum(colSums(df1[-1])), 
                salesmaturity = cum.sales*age/max(age))
    #   age cum.sales salesmaturity
    #1   1        15          3.75
    #2   2        38         19.00
    #3   3        65         48.75
    #4   4        83         83.00
    

    数据

    df1 <- structure(list(date = 201601:201604, `1` = c(2L, 3L, 4L, 6L), 
    `2` = c(4L, 7L, 8L, 4L), `3` = c(6L, 7L, 9L, 5L), `4` = c(1L, 
    4L, 6L, 7L)), .Names = c("date", "1", "2", "3", "4"),
    class = "data.frame", row.names = c(NA, -4L))
    

    【讨论】:

    • 成功了!非常感谢阿克伦
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2017-06-11
    • 2018-07-05
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多