2017-07-11 28 views
0

組成數據幀。如何計算每小時TMP和DW對1/1至1/9的差值/誤差的平方誤差?需要hour1之間的平方差到每一天的24小時,從1/1到1/9 1/10對多行平方差之和

總和的輸出應該看起來像

Date SETmp SEDW 
2012/1/1 X1 Y1 
...... 
2012/1/9 X9 Y9 

數據:

set.seed(1) 

dataset <- data.frame(Date = seq(from = as.POSIXct("2012-1-1 0:00", tz = "UTC"), 
           to = as.POSIXct("2012-1-10 23:00", tz = "UTC"), 
           by="hour"), 
         TMP = rnorm(240), 
         DW = rnorm(240)) 
+0

所以你想把最後24小時作爲「差異」的一方,每一天作爲「差異」的另一方?你可能想要得到這些平方差的總和(或者是平均值?)(但你並不真正說出你的描述中的哪一個)。 –

+0

每天從第1小時到第24小時的平方差之和從1/1到1/9對1/10。 – jkl

+0

我的iPhone不會讓我測試代碼,但您應該使用[編輯]在您的問題主體內澄清。 –

回答

1

如果我正確理解你的問題,我們可以得到有使用bymerge功能:

# add day and hour columns (for subsetting and merge) 
dataset$day <- lubridate::day(dataset$Date) 
dataset$hour <- lubridate::hour(dataset$Date) 
# split data apart 
data_ten <- subset(dataset, day == 10) 
data_one_to_nine <- subset(dataset, day != 10) 
# for each date, merge to data_ten using hours 
# then calculate sum of squared differences 
do.call('rbind.data.frame', 
by(data_one_to_nine, data_one_to_nine$day, function(d){ 
    xm <- merge(d, data_ten, by = 'hour') 
    data.frame(
    'Date' = unique(as.Date(d$Date)), 
    'SE_TMP' = sum((xm$TMP.x - xm$TMP.y)^2), 
    'SE_DW' = sum((xm$DW.x - xm$DW.y)^2), 
    stringsAsFactors = FALSE 
    ) 
}) 
) 

     Date SE_TMP SE_DW 
1 2012-01-01 59.33207 63.41261 
2 2012-01-02 42.04597 58.90700 
3 2012-01-03 66.15492 51.81897 
4 2012-01-04 31.83438 40.68851 
5 2012-01-05 30.26666 59.30694 
6 2012-01-06 45.05186 55.39751 
7 2012-01-07 61.93305 39.76287 
8 2012-01-08 37.08246 47.81958 
9 2012-01-09 58.54562 64.79331 
+0

謝謝。這是我正在尋找的。我不知道如何合併兩個子集。如何爲24小時的最大/最小/平均值而不是全部24小時做平方差的和? – jkl

+0

你會修改'sum((x-y)^ 2)裏面的代碼' – bouncyball

相關問題