我有date\u时间字段,其中包含分钟范围(第一分钟,第二分钟…)。
我想整合
theMass
每小时一次。
我必须按小时计算平均值(质量取决于t\u in,并表示为vs)
vs
和
t_in
进行正确的计算。
代码给了我24个结果(每小时一次积分),但你可以看到结果呈线性增长,这是不对的。
所以,我不确定我的计算结果,或者是否有其他方法可以实现这一点。
library(tidyverse)
library(Bolstad2)
thelength = 1440
date_time <- seq(1, thelength)
fo <- runif(thelength, 1000, 3000)
vs <- runif(thelength, 0, 16)
t_in <- runif(thelength, 0, 150)
A3 <- 1.998201136e-10
A2 <- -1.467393126e-07
A1 <- -0.000681555
A0 <- 1.010255780
dens <- 0.9859
# Mass in kgr/h
theMass <- fo * dens * (A3 * (t_in ^ 3) + A2 * (t_in ^ 2) + A1 * t_in + A0)
df <- data.frame(date_time, fo, vs, t_in, theMass)
# because date_time is by 1 min, we want
# to integrate every hour, so by 60 values
df <- df %>%
group_by(cut(date_time, breaks = seq(0, thelength, by = 60))) %>%
summarise_at(vars(t_in, vs), mean, na.rm = TRUE)
df <- na.omit(df)
per_hour <- 60
hours <- dim(df)[1]
# result of integration
integration <- vector('list', hours)
# Mass for first hour
theMass_1 <- fo * dens * (A3 * (df$t_in[1] ^ 3) +
A2 * (df$t_in[1] ^ 2) +
A1 * df$t_in[1] + A0)
# integration for 1 hour
integration[[1]] <- sintegral(date_time[1:length(seq(1, per_hour))],
theMass_1[1:length(seq(1, per_hour))])
# integration for the rest hours
for (i in 2:hours)
{
# add 60 minutes at every hour loop
if (i > 2)
{
per_hour <- 60 + per_hour
}
# integrate by every hour
integration[[i]] <- sintegral(date_time[1:length(seq(per_hour, 2 * per_hour))],
theMass[1:length(seq(per_hour, 2 * per_hour))])
}
# the result should hold only the integration value for every hour
result <- c()
for (i in 1:length(integration))
{
result[i] <- integration[[i]]$int
}
result