r - 基于日期的计算
问题描述
我有一个我的实际观察 df1 的数据集:
Date Month Year Actual
02/12/2017 December 17 4623
12/12/2017 December 17 5111
22/12/2017 December 17 4800
22/12/2017 December 17 4769
02/01/2018 January 18 4711
03/01/2018 January 18 4503
04/01/2018 January 18 4650
05/01/2018 January 18 4598
06/02/2018 February 18 4612
07/02/2018 February 18 4493
08/02/2018 February 18 4515
09/02/2018 February 18 4469
然后是我的每月预测 df2:
Month Year Prediction
December 17 4874
January 18 4626
February 18 4576
如何根据每个月和每年从我的实际值中减去我的预测?所以我会得到以下错误:
Error
-251
237
-74
-105
85
-123
24
-28
36
-83
-61
-107
解决方案
请注意,问题中的结果是错误的,因为年份与 2018 年的实际值不匹配。
1) Base R Left 加入数据帧并执行减法:
transform(merge(act, pred, all.x = TRUE, sort = FALSE), Diff = Prediction - Actual)
给予:
Month Year Date Actual Prediction Diff
1 December 17 02/12/2017 4623 4874 251
2 December 17 12/12/2017 5111 4874 -237
3 December 17 22/12/2017 4800 4874 74
4 December 17 22/12/2017 4769 4874 105
5 January 18 02/01/2018 4711 NA NA
6 January 18 03/01/2018 4503 NA NA
7 January 18 04/01/2018 4650 NA NA
8 January 18 05/01/2018 4598 NA NA
9 February 18 06/02/2018 4612 NA NA
10 February 18 07/02/2018 4493 NA NA
11 February 18 08/02/2018 4515 NA NA
12 February 18 09/02/2018 4469 NA NA
sqldf
library(sqldf)
sqldf("select *, Prediction - Actual as Diff
from act left join pred using(Year, Month)")
给予:
Date Month Year Actual Prediction Diff
1 02/12/2017 December 17 4623 4874 251
2 12/12/2017 December 17 5111 4874 -237
3 22/12/2017 December 17 4800 4874 74
4 22/12/2017 December 17 4769 4874 105
5 02/01/2018 January 18 4711 NA NA
6 03/01/2018 January 18 4503 NA NA
7 04/01/2018 January 18 4650 NA NA
8 05/01/2018 January 18 4598 NA NA
9 06/02/2018 February 18 4612 NA NA
10 07/02/2018 February 18 4493 NA NA
11 08/02/2018 February 18 4515 NA NA
12 09/02/2018 February 18 4469 NA NA
笔记
可重现形式的输入是:
Lines1 <- "
Date Month Year Actual
02/12/2017 December 17 4623
12/12/2017 December 17 5111
22/12/2017 December 17 4800
22/12/2017 December 17 4769
02/01/2018 January 18 4711
03/01/2018 January 18 4503
04/01/2018 January 18 4650
05/01/2018 January 18 4598
06/02/2018 February 18 4612
07/02/2018 February 18 4493
08/02/2018 February 18 4515
09/02/2018 February 18 4469"
act <- read.table(text = Lines1, header = TRUE, as.is = TRUE)
Lines2 <- "
Month Year Prediction
December 17 4874
January 17 4626
February 17 4576"
pred <- read.table(text = Lines2, header = TRUE, as.is = TRUE)
推荐阅读
- excel - 如果两个条件满足,则 Excel 条件格式
- sql - 是否可以通过 T-SQL 中另一个窗口函数的结果对数据集进行排名?
- asp.net-core-mvc - 如何设置默认选中的单选按钮
- npm - 如何更新已发布的 npm 包?
- c++ - 代码执行无法继续,因为找不到 libstdc++-6.dll
- java - 使用带有 @Transactional 的 spring bean 会给出 TransactionRequiredException: No EntityManager with actual transaction available for current thread
- python - 在模型中使用自定义层时,Keras load_model 导致“TypeError:关键字参数不理解:”
- php - PHP 中的一个简单的 mail() 表单停止发送正确的电子邮件
- c# - 在 C# 中解析 yaml 流时如何保留注释?
- gstreamer - 如何在自定义插件中创建 GstBuffer Pool