r - 对每个组进行不同的预测
问题描述
我有如下所示的数据集:
Category Weekly_Date a b
<chr> <date> <dbl> <dbl>
1 aa 2018-07-01 36.6 1.4
2 aa 2018-07-02 5.30 0
3 bb 2018-07-01 4.62 1.2
4 bb 2018-07-02 3.71 1.5
5 cc 2018-07-01 3.41 12
... ... ... ... ...
我分别为每组拟合线性回归:
fit_linreg <- train %>%
group_by(Category) %>%
do(model = lm(Target ~ Unit_price + Unit_discount, data = .))
现在我对每个类别都有不同的模型:
aa model1
bb model2
cc model3
所以,我需要将每个模型应用到适当的类别。如何做到这一点?(最好使用 dplyr)
解决方案
如果您嵌套测试数据的数据,将其与模型连接起来,那么您可以使用 map2 使用训练好的模型对测试数据进行预测。请参见下面的 mtcars 示例。
library(tidyverse)
x <- mtcars %>%
group_by(gear) %>%
do(model = lm(mpg ~ hp + wt, data = .))
x
Source: local data frame [3 x 2]
Groups: <by row>
# A tibble: 3 x 2
gear model
* <dbl> <list>
1 3 <S3: lm>
2 4 <S3: lm>
3 5 <S3: lm>
mtcars %>%
group_by(gear) %>%
nest %>%
inner_join(x) %>%
mutate(preds = map2(model, data, predict)) %>%
unnest(preds)
Joining, by = "gear"
# A tibble: 32 x 2
gear preds
<dbl> <dbl>
1 4 22.0
2 4 21.2
3 4 25.1
4 4 26.0
5 4 22.2
6 4 17.8
7 4 17.8
8 4 28.7
9 4 32.3
10 4 30.0
# ... with 22 more rows
推荐阅读
- angular - 如何调用一个函数
让变量声明Angular 4 - python - 在 aws lambda 上运行时如何解决 python 中的 cx_Oracle 问题
- google-apps-script - 如何从 Google Apps 脚本触发器调用本地脚本?
- mysql - 具有多个连接的 MySQL 查询在 React js App 中性能缓慢
- javascript - 规范化 TS 和 Babel 之间默认导入的正确方法是什么?
- docker - docker-compose 在 ECS 上运行
- python - id() 与 `is` 运算符。比较`id`s是否安全?相同的“id”是否意味着相同的对象?
- javafx - JavaFX - 使用 FXML load() 函数时出错
- linux - 反应项目设置 - npm 运行 webpack 问题
- r - 将一个数据框中的列合并到新的数据框中,并过滤