2015-05-12 27 views
1

我正在使用Kaggle數據集進行自行車共享。我想編寫腳本,將我的預測值與訓練數據集進行比較。我希望比較每年每月的平均值。提取並比較R中日期的列數據

訓練數據集,我稱之爲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 

我的預測值,我叫子是這樣的:

   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

請提供一個可重複的示例。你想加入飛蛾/年,但你提供了同一日期的小時數據集。無論如何,這裏所需要的只是一個簡單的合併,就像我看到的那樣。你可以同時使用'data.table's二進制連接和'by = .EACHI'結合執行這兩個操作。 –

+0

謝謝你的建議,我已經修改了這個問題,使它具有可重現性。你有可能擴展你的答案嗎? –

+0

看到我的答案。雖然請記住'37.5-28!= 15.5' –

回答

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") 
+0

什麼是'monyear'?手段差異步驟在哪裏?你甚至試過這個代碼嗎? –

+0

你說得很對,我沒有。 'monyear'在問題中被指定爲'df'的一個元素。海報沒有告訴我他的測試和訓練數據集的名稱,所以我給他們直觀的名字。我還假定海報能夠從另一列中扣除一列。早上好! – dash2