我挣扎着看起来应该只是前一个问题的简单扩展,我问here。
我试图聚合(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 by Day的OLS回归的系数估计值。我试着这样做:
new_df2<-df[,(lm(Rev~Day)), by=list(Brand)]
这看起来并不合适。思考?我确定这是我错过的显而易见的东西。
答案 0 :(得分:5)
你有几个选择。
您可以将整个模型对象保存为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]
答案 1 :(得分:3)
我认为这就是你想要的:
new_df2<-df[,(lm(Rev~Day)$coefficients[["Day"]]), by=list(Brand)]
lm
返回一个完整的模型对象,您需要向下钻取它以从每个可以转换为列的组中获取单个值。
答案 2 :(得分: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