【发布时间】:2013-11-08 21:29:50
【问题描述】:
我有一个名为 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 列。
【问题讨论】:
-
如果您不提供最低限度的工作示例(包括数据),将很难为您提供帮助。
-
代码改进类型的东西在我们可以看到的可重现示例中效果更好
-
这是对您前两个问题的改进,但仍然很难提供帮助,因为我们没有
data可以单独使用。
标签: r