【发布时间】:2020-01-19 06:26:38
【问题描述】:
我有一个大型的每小时时间序列数据集,显示不同时间的温度。该系列中有许多缺失值 (NA),因此我使用线性插值来使用 imputeTS 包估算缺失值。在插值之前,我被告知要为估算值创建一个列作为动物园对象。这用估算的温度替换了任何 NA 温度。
我正在进行采暖度日分析,即将建筑物加热到室温所需的加热。如果室外温度低于 15.5 度,则需要加热。我希望忽略(或设置为 NA)高于 15.5 的值,只关注以下温度。然后我想计算加热度天数,即(15.5-Temp)*1/24(一天 24 小时)。这通常很简单,但是我在处理动物园对象时遇到了麻烦。谁能帮忙??
数据的一个例子是:
DateTimes <- as.POSIXct(c("2009-01-01 00:00:00", "2009-01-01 01:00:00", "2009-01-01 02:00:00", "2009-01-01 03:00:00", "2009-01-01 04:00:00", "2009-01-01 05:00:00", "2009-01-01 06:00:00"))
MeanTemp <- c(0.8, 0.7, 0.7, NA, 0.8, 0.9, 1.1)
HourTemp <- data.frame(DateTimes, MeanTemp)
这些是我的插补步骤:
#Use linear interpolation to impute missing values
TempImp <- zoo(HourTemp$MeanTemp, HourTemp$DateTimes)
TempImp <- imputeTS::na.interpolation(TempImp, option = "linear")
#Add imputed values to data
as.data.frame(HourTemp)
HourTemp$airTempImp <- round(TempImp,1)
#Add imputed flag
HourTemp$Imputed <- ifelse(is.na(HourTemp$MeanTemp), "Imputed", "Observed")
HourTemp
插补工作成功,将 NA 值替换为估计值,但我无法操纵动物园对象 'airTempImp' 来创建开头段落中指定的加热度天数列。
我尝试过使用 ifelse、ifelse.zoo、transform,但似乎都不起作用!
谢谢!
【问题讨论】:
-
@RonakShah 我已经编辑了帖子,希望对您有所帮助!
-
@RonakShah 嗨,对不起,我在开头的段落中解释了。我想将高于 15.5 的温度设置为 NA,然后使用所示公式将温度转换为加热度日。
-
(1)
DateTimes <-行有语法错误。请修复。 (2) 如果您无论如何都在使用动物园,那么您可以使用该软件包中的na.approx。不需要其他软件包。 (3) 显示的代码最好写成transform(HourTemp, airTempImp = round(na.approx(MeanTemp, na.rm = FALSE), 1), Imputed = ifelse(is.na(MeanTemp), "Imputed", "Observed"))(4) 你遇到问题的代码到底是什么??? -
@G.Grothendieck (1) 对不起,日期时间的语法错误,我已经有一个日期时间列,所以只是用它来显示它应该是什么。 (2)/(3) 好吧,看起来更好! (4) 我在将 airTempImp 转换为指定的加热度日时遇到问题。作为一个角色,我可以做到这一点,但作为动物园对象却遇到了问题。
标签: r time-series zoo imputets