我有一个名为 data 的数据框。我正在使用名为 KEY 的属性使用 split 函数拆分数据。
data <- split(data, data$KEY);
通过 KEY 拆分数据框后,我们得到的是各个公司的数据。数据框数据包含宇宙中所有公司的数据。拆分后,每个单独的拆分都有两列,年份和销售额。对于每个拆分,我必须计算每年对应的增量销售额。例如,如果我们有数据 2002 - 10, 2003 - 12, 2004 - 15, 2005 - 20。我有兴趣得到的是 2003-2, 2004 -3, 2005 - 5,对于每个拆分。我编写了一个名为 mod_sale 的函数来执行上述工作:
data[with(data, order(year)),];
sale_data <- diff(data$SALE);
data <- data[-1,];
data$SALE <- sale_data;
return(data)
目前,我正在使用 for 循环:
for(key in names(data)){
a <- try(mod_sale(data[[key]]))
if(class(a) == "try-error") next;
mod_data <- rbind(mod_data,a)};
我认为有某种方法,我可以使用 sapply (也可能是 plyr)。有人可以帮我改进这个 R 代码吗?不确定 sapply 代码会如何运行。
sapply(data, mod_sale)
任何帮助,将不胜感激。谢谢。
编辑:
这是一个数据示例:
a <- data.frame();
key <- c(1,1,1,1,2,2,2,2,2,3,3,3);
sales <- c(12,12,15,8,3,6,3,9,9,12,3,7);
year <- c(2002,2003,2004,2005,2001,2002,2003,2004,2005,2003,2004,2005);
ovar <- runif(12,5.0,7.5);
a <- data.frame(key,sales,year,ovar)
在生成的 data.frame 中,我期待的是增量销售而不是实际销售。显然,我们会为 3 个 key 丢失 3 个数据点;每个起始年一个,因为我们正在考虑差异。因此,结果 data.frame 中将少三行,其中包含 key、diff(sales)、year 和 ovar 列。