我正在尝试将显示销售额的数据转换为当年累计销售总额。我想显示白天出现的销售情况,而不是累计数字。
以下是数据示例:
Product, Geography, Date, SalesThisYear
Prod_1, Area_A, 20130501, 10
Prod_2, Area_B, 20130501, 5
Prod_1, Area_B, 20130501, 3
Prod_1, Area_a, 20130502, 12
Prod_2, Area_B, 20120502, 5
Prod_1, Area_B, 20130502, 4
...
所以转换的数据看起来像是:
Product, Geography, Date, SalesThisYear*, DailySales
Prod_1, Area_A, 20130501, 10, 10
Prod_2, Area_B, 20130501, 5, 5
Prod_1, Area_B, 20130501, 3, 3
Prod_1, Area_a, 20130502, 12, 2
Prod_2, Area_B, 20120502, 3, 0
Prod_1, Area_B, 20130502, 4, 1
然后可以在以后的分析中使用它。
我是 R 的新手,所以找出解决此问题的最佳方法。我知道我有两个分类字段,所以期待一种方法可以用来考虑这些领域。我的总体思路是使用一个函数,然后使用apply命令对整个数据集运行该函数。作为概述,我的想法是:
(首先将数据文件加载到 R 。使用rbind将第二个数据文件附加到 R 。)
创建一个执行以下操作的函数:
数据量大约是每天120k行,因此在步骤3中使用for循环的标准路径可能不可取。
上述方法是否合适?或者我需要学习一个未知的未知数? :)
答案 0 :(得分:1)
transform(d,
SalesThisDay = ave(SalesThisYear, Product, Geography,
FUN=function(x) x - c(0, head(x, -1))))
# Product Geography Date SalesThisYear SalesThisDay
# 1 prod_1 area_a 20130501 10 10
# 2 prod_2 area_b 20130501 5 5
# 3 prod_1 area_b 20130501 3 3
# 4 prod_1 area_a 20130502 12 2
# 5 prod_2 area_b 20120502 5 0
# 6 prod_1 area_b 20130502 4 1