R 多行的平方差之和

R 多行的平方差之和,r,tidyr,R,Tidyr,组成一个数据帧。如何计算1/1到1/9与1/10的每小时TMP和DW的平方差/误差?需要每天1小时1到24小时1/1到1/9与1/10之间的平方差之和 输出应该如下所示 Date SETmp SEDW 2012/1/1 X1 Y1 ...... 2012/1/9 X9 Y9 数据: 如果我正确理解了您的问题,我们可以使用by和merge函数实现: # add day and hour columns (for subsetting and merge) dataset$day

组成一个数据帧。如何计算1/1到1/9与1/10的每小时TMP和DW的平方差/误差?需要每天1小时1到24小时1/1到1/9与1/10之间的平方差之和

输出应该如下所示

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


如果我正确理解了您的问题,我们可以使用by和merge函数实现:

# 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

所以你想把最后24小时作为差异的一面,每天作为差异的另一面?你可能想要总数还是平均数?这些平方差的总和,但你并没有在你的描述中真正说明。每天1小时1到24小时1/1到1/9与1/10之间的平方差之和。我的iPhone不允许我测试代码,但你应该用它在你的问题体中进行澄清。当然可以。编辑。谢谢。这就是我要找的。我不知道先合并两个子集。如何只对24小时的最大/最小/平均值进行平方差求和,而不是对所有24小时进行平方差求和?您可以修改sumx-y^2中的代码
# 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