在R中按日期提取和比较列数据

时间:2015-05-12 07:59:03

标签: r dataframe mean calculated-columns lubridate

我正在使用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

有更好的方法吗?

1 个答案:

答案 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")