矩阵列的累积和计算

时间:2016-09-21 15:19:30

标签: r matrix cumsum

我有一个看起来像这样的矩阵:

           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

行指示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

有关如何快速完成任务的任何重新命令? 提前致谢

1 个答案:

答案 0 :(得分:1)

假设初始数据集是data.frame(因为matrix不能保持混合类,否则'date'将是'numeric'类。如果它是一个数字类,下面的解决方案仍然作品)。创建一个data.frame,其中'age'为matrix/data.framemutate的列名称中的列,以创建'cum.sales'(从获取数据集的列总和的累积总和而不是'date.sumns'和'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))
相关问题