【发布时间】:2014-02-16 19:30:54
【问题描述】:
我已经读入并格式化了我的数据集,如下所示。
library(xts)
#Read data from file
x <- read.csv("data.dat", header=F)
x[is.na(x)] <- c(0) #If empty fill in zero
#Construct data frames
rawdata.h <- data.frame(x[,2],x[,3],x[,4],x[,5],x[,6],x[,7],x[,8]) #Hourly data
rawdata.15min <- data.frame(x[,10]) #15 min data
#Convert time index to proper format
index.h <- as.POSIXct(strptime(x[,1], "%d.%m.%Y %H:%M"))
index.15min <- as.POSIXct(strptime(x[,9], "%d.%m.%Y %H:%M"))
#Set column names
names(rawdata.h) <- c("spot","RKup", "RKdown","RKcon","anm", "pp.stat","prod.h")
names(rawdata.15min) <- c("prod.15min")
#Convert data frames to time series objects
data.htemp <- xts(rawdata.h,order.by=index.h)
data.15mintemp <- xts(rawdata.15min,order.by=index.15min)
#Select desired subset period
data.h <- data.htemp["2013"]
data.15min <- data.15mintemp["2013"]
我希望能够将来自data.h$prod.h 的每小时数据与来自data.15min$prod.15min 的数据(分辨率为 15 分钟,对应于同一小时)相结合。
例如,将 2013-12-01 00:00-01:00 时间的小时值与同一小时的最后 15 分钟值(即 2013-12 年的 15 分钟值)取平均值-01 00:45-01:00。我正在寻找一种灵活的方式来在任意时间完成此操作。
有什么建议吗?
编辑:进一步澄清:我想做这样的事情:
N <- NROW(data.h$prod.h)
for (i in 1:N){
prod.average[i] <- mean(data.h$prod.h[i] + #INSERT CODE THAT FINDS LAST 15 MIN IN HOUR i )
}
【问题讨论】:
-
您能否提供您的数据样本以及所需结果的示例?每小时和 15 分钟数据的行数是否相同?而您希望每个小时只占用最后 15 分钟?
-
我发布了一个我找到的潜在解决方案的编辑。
-
见
?to.period、?merge.xts、?na.locf、?period.apply。也许this helps。如果没有,那么将您的数据设为reproducible 将大大有助于获得答案。 -
感谢您的意见!我现在看到有几种方法可以解决这个问题,例如
to.period与我的解决方案几乎相同(参见最后的编辑)。 -
您可以回答自己的问题。您可以离开上面的问题部分,并移动作为您答案的解决方案。这样可以将问题标记为完成。
标签: r time-series