我正在使用Kaggle数据集进行自行车共享。我想编写一个脚本,将我的预测值与训练数据集进行比较。我想比较一年中每月的平均值。
训练数据集,我打电话给df看起来像这样:
datetime count
1 2011-01-01 00:00:00 16
2 2011-01-11 01:00:00 40
3 2011-02-01 02:00:00 32
4 2011-02-11 03:00:00 13
5 2011-03-21 04:00:00 1
6 2011-03-11 05:00:00 1
我的预测值,我称sub看起来像这样:
datetime count
1 2011-01-01 00:00:00 42
2 2011-01-11 01:00:00 33
3 2011-02-01 02:00:00 33
4 2011-02-11 05:00:00 36
5 2011-03-21 06:00:00 57
6 2011-03-11 07:00:00 129
我使用lubridate包隔离了月份和年份。然后将月份日期连接为新列。我使用了新列并拆分,然后使用lapply找到平均值。
library(lubridate)
df$monyear <- interaction(
month(ymd_hms(df$datetime)),
year(ymd_hms(df$datetime)),
sep="-")
s<-split(df,df$monyear)
x <-lapply(s,function(x) colMeans(x[,c("count", "count")],na.rm=TRUE))
但是这给了我嵌套在列表中的每个月 - 年组合的平均值,因此不容易比较。我想要的是:
year-month train-mean sub-mean diff
1 2011-01 28 37.5 9.5
2 2011-02 22.5 34.5 12
3 2011-03 1 93 92
有更好的方法吗?
答案 0 :(得分:0)
像这样的东西。对于您的每个数据集:
library(dplyr)
dftrain %>% group_by(monyear) %>% summarize(mc=mean(count)) -> xtrain
dftest %>% group_by(monyear) %>% summarize(mc=mean(count)) -> xtest
merged <- merge(xtrain, xtest, by="monyear")