每一天的给定间隔的最大斜率(Maximum slope for a given interval e

2019-08-17 20:56发布

我已经从三个不同的位置,每隔10分钟在多天(实际上2年数据的)测量一组与地面表面温度的时间序列数据。 我所感兴趣的计算是每天每个网站的任何60分钟区间的最大斜率(升温速度)。

所以基本上我想在同一时间通过每天来上班,10分钟,用60分钟的窗口,并计算出每个窗口的斜率,然后确定在它发生的当天最大坡度和时间。 然后我想在数据集中这一功能应用到每一天。 的日期/时间是以下格式(%米/%d /%Y%H:%M)。

我使用ddply和动物园包和功能rollapply,做这样的事伪想象的东西

ddply(数据,。(位置,一天),函数(d)最大(rollapply(斜率(d $温度〜d $时间,数据= d)))

其中,“时间”是每一天(每10分钟)和“天”中的时间仅仅是这样的功能,可以在所有日期适用日期。 显然,“坡”不是的R功能,将必须写入计算实际斜坡。

有没有人有动物园更多的经验和rollapply或能想到的另一种方式来解决这个问题?

我已经包括了从单一地点这里一些示例数据(这样的位置列已被删除) https://gist.github.com/natemiller/42eaf45747f31a6ccf9a

感谢您的任何帮助,奈特

编辑:我因为使用​​geektrader的约书亚Ulrich的答案的组合从下面,和使用的基本代数的值转换回每小时ºC单位

    CperH<-dat$Temp-(dat$Temp/(1+dat$ROC))

效果很好。

Answer 1:

您可以使用xts时间序列包,它是时间序列分析的非常好。 联合TTR包,你可以得到你想要很容易的。

require(xts)
require(TTR)
dat <- read.csv("https://gist.github.com/natemiller/42eaf45747f31a6ccf9a/raw/916443cfb353d82e8af6cdebdd80b2e956317b24/sampleTempData.csv")

dat.xts <- .xts(x = dat$Temp, index = as.POSIXct(strptime(dat$Date, format = "%m/%d/%y %H:%M")))
names(dat.xts) <- "Temp"
head(dat.xts)
##                     Temp
## 2011-04-11 03:48:00  9.5
## 2011-04-11 03:58:00  9.5
## 2011-04-11 04:08:00  9.5
## 2011-04-11 04:18:00  9.5
## 2011-04-11 04:28:00  9.5
## 2011-04-11 04:38:00  9.5


dat.xts$ROC <- ROC(dat.xts, n = 6)
head(dat.xts, 10)
##                     Temp ROC
## 2011-04-11 03:48:00  9.5  NA
## 2011-04-11 03:58:00  9.5  NA
## 2011-04-11 04:08:00  9.5  NA
## 2011-04-11 04:18:00  9.5  NA
## 2011-04-11 04:28:00  9.5  NA
## 2011-04-11 04:38:00  9.5  NA
## 2011-04-11 04:48:00  9.5   0
## 2011-04-11 04:58:00  9.5   0
## 2011-04-11 05:08:00  9.5   0
## 2011-04-11 05:18:00  9.5   0

dat.xts[which.max(dat.xts$ROC), ]
##                     Temp       ROC
## 2011-04-12 09:48:00 14.5 0.5340825


# If you want to do analysis on per day basis.
dat.xts <- .xts(x = dat$Temp, index = as.POSIXct(strptime(dat$Date, format = "%m/%d/%y %H:%M")))
names(dat.xts) <- "Temp"
head(dat.xts)
##                     Temp
## 2011-04-11 03:48:00  9.5
## 2011-04-11 03:58:00  9.5
## 2011-04-11 04:08:00  9.5
## 2011-04-11 04:18:00  9.5
## 2011-04-11 04:28:00  9.5
## 2011-04-11 04:38:00  9.5


ll <- split.xts(dat.xts, f = "days")


ll <- lapply(ll, FUN = function(x) {
    x$ROC <- ROC(x, 6)
    return(x)
})

max.ll <- lapply(ll, function(x) x[which.max(x$ROC), ])

max.ll
## [[1]]
##                     Temp       ROC
## 2011-04-11 13:38:00 20.5 0.4946962
## 
## [[2]]
##                     Temp       ROC
## 2011-04-12 09:48:00 14.5 0.5340825
## 
## [[3]]
##                     Temp       ROC
## 2011-04-13 10:18:00 15.5 0.4382549
## 
## [[4]]
##                     Temp       ROC
## 2011-04-14 10:38:00 14.5 0.3715636


文章来源: Maximum slope for a given interval each day
标签: r plyr apply zoo