展望数据集n秒

时间:2011-08-30 16:16:50

标签: r

我有一组数据如下:

 TIME,VALUE
 09:00:00.0000000, 5.0  # observation 1
 09:00:00.0002326, 4.0  # observation 2
 ...
 09:00:30.0056464, 7.0  # observation n
 ...

我需要能够从当前观察中查找出三十分的值并做出改变。例如,对于上面的观察1,我会抓住观察n,我的差异将是7.0 - 5.0 = 2.0。我想为原始集合中的每个观察做到这一点。

时间值可能不会相隔三十秒,所以我想得到最接近三十秒的观察值。它可能略大于30秒,但它应该不会少。

R中是否有这样的设计模式,或者有一个代码可以帮助我以“R方式”(基于矢量)执行此操作的库?

3 个答案:

答案 0 :(得分:1)

difflag参数一起使用。

diff(your_data$TIME, lag = n)

答案 1 :(得分:1)

在一行中:

> which(x-time0>=30)[1]
[1] 10

完整的解释:

创建一些示例数据。 time0x日期的POSIXct向量中的第一个元素。

> set.seed(1)
> options(digits.secs=3)
> basetime <- "2011-08-30 09:00:00"
> time0 <- as.POSIXct(strptime(basetime, "%Y-%m-%d %H:%M:%S"))
> x <- time0 + sort(runif(20, 0, 60))

time0的每个元素中减去x。你可以看到第10个元素恰好是大于30s的第一次:

> x-time0
Time differences in secs
 [1]  3.707176 10.593405 12.100916 12.358474 15.930520 22.327434 22.802111
 [8] 23.046223 29.861954 34.371202 37.746843 39.647867 41.221371 43.057111
[15] 46.190485 46.646713 53.903381 54.492467 56.680516 59.514366

以下单行代码提取此内容。由于日期按升序排序,因此使用x-time0 > 30

提取子集的第一个元素
> which(x-time0>=30)[1]
[1] 10

答案 2 :(得分:0)

可能不是最有效的方式,但它会完成工作。

# Create a sequece of time values
fooDate<-seq(as.POSIXct("2011-01-01 00:00:00",tz="GMT"),as.POSIXct("2011-01-31 00:00:00",tz="GMT"),by="hours")
# And some fictional data
fooData<-rnorm(length(fooDate))
# Put it into a dataframe
foo <-data.frame(time=fooDate,data=fooData)
#Get the start time
exampleTime<-foo$time[1]
#A time 34 days in advance
desiredTime <- exampleTime+60*60*34
#Which row is it in.
index <- which(foo$time>=desiredTime)
#and to get it.
foo[index[1],2]-foo[1,2]