data というデータフレームがあります。KEYという属性で分割関数を使用してデータを分割しています。
data <- split(data, data$KEY);
データフレームを KEY で分割すると、個々の企業のデータが得られます。データフレーム データには、ユニバース内のすべての企業のデータが含まれていました。分割後、個々の分割には年と売上の 2 つの列があります。分割ごとに、各年に対応する増分売上を計算する必要があります。たとえば、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 つのキーに対して 3 つのデータ ポイントが失われます。違いを取っているので、開始年ごとに1つ。したがって、結果の data.frame には 3 つの行が少なくなり、key、diff(sales)、year、および ovar の列が含まれます。