4

私は、ここで尋ねた前の質問の単純な拡張であるように思われることに苦労しています。

(a)日付の範囲と(b)因子変数を集計しようとしています。サンプルデータは次のとおりです。

Brand    Day     Rev     RVP              
  A      1        2535.00  195.00 
  B      1        1785.45  43.55 
  C      1        1730.87  32.66 
  A      2        920.00   230.00
  B      2        248.22   48.99 
  C      3        16466.00 189.00      
  A      1        2535.00  195.00 
  B      3        1785.45  43.55 
  C      3        1730.87  32.66 
  A      4        920.00   230.00
  B      5        248.22   48.99 
  C      4        16466.00 189.00

役立つアドバイスのおかげで、data.tableを使用して、ある期間のブランドの平均収益を見つける方法を見つけました。

new_df<-df[,(mean(Rev)), by=list(Brand,Day)]

ここで、各ブランドの日ごとのRevのOLS回帰からの係数推定値をリストする列がある新しいテーブルを作成したいと思います。私はこれを次のようにしようとしました:

new_df2<-df[,(lm(Rev~Day)), by=list(Brand)]

それは完全に正しくないようです。考え?それは私が見逃した明らかなことだと確信しています。

4

3 に答える 3

6

いくつかのオプションがあります。

モデル オブジェクト全体を data.table 内のリストとして保存できます。

models <- df[,   list(model  = list(lm(Rev ~ Day))),by = Brand]

models
   Brand model
1:     A  <lm>
2:     B  <lm>
3:     C  <lm>


# look at the models
models[,print(model[[1]]),by= Brand]


Call:
lm(formula = Rev ~ Day)

Coefficients:
(Intercept)          Day  
     2804.2       -538.3  



Call:
lm(formula = Rev ~ Day)

Coefficients:
(Intercept)          Day  
     1741.5       -263.5  



Call:
lm(formula = Rev ~ Day)

Coefficients:
(Intercept)          Day  
      -3698         4653  

係数を保存できます

models[, {coefs <- coef(model[[1]])
      list(coefs = coefs, name = names(coefs))}, by = Brand]
##     Brand      coefs        name
## 1:     A  2804.1667 (Intercept)
## 2:     A  -538.3333         Day
## 3:     B  1741.5291 (Intercept)
## 4:     B  -263.5251         Day
## 5:     C -3697.8621 (Intercept)
## 6:     C  4653.1989         Day

または、モデルのリストを抽出することもできます

  models[,model]
于 2012-12-16T22:42:21.113 に答える
3

私はこれがあなたが望むものだと思います:

new_df2<-df[,(lm(Rev~Day)$coefficients[["Day"]]), by=list(Brand)]

lm完全なモデルオブジェクトを返します。列に変換できる各グループから単一の値を取得するには、そのオブジェクトにドリルダウンする必要があります。

于 2012-12-16T22:42:41.157 に答える
1
> DF <- read.table(text="Brand    Day     Rev     RVP              
+   A      1        2535.00  195.00 
+   B      1        1785.45  43.55 
+   C      1        1730.87  32.66 
+   A      2        920.00   230.00
+   B      2        248.22   48.99 
+   C      3        16466.00 189.00      
+   A      1        2535.00  195.00 
+   B      3        1785.45  43.55 
+   C      3        1730.87  32.66 
+   A      4        920.00   230.00
+   B      5        248.22   48.99 
+   C      4        16466.00 189.00", header=TRUE)
> DT <- data.table(DF)
> Mod.tbl<-DT[, list(mod=list(lm(Rev~Day))), by=list(Brand)]
> Mod.tbl[ , coef(mod[[1]])["Day"], by= Brand]
   Brand           V1
1:     A -538.3333333
2:     B -263.5251429
3:     C 4653.1989474
于 2012-12-17T00:17:00.057 に答える