我有一个看起来像这样的矩阵:
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
有关如何快速完成任务的任何重新命令? 提前致谢
答案 0 :(得分:1)
假设初始数据集是data.frame
(因为matrix
不能保持混合类,否则'date'将是'numeric'类。如果它是一个数字类,下面的解决方案仍然作品)。创建一个data.frame,其中'age'为matrix/data.frame
,mutate
的列名称中的列,以创建'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))