【发布时间】:2015-07-27 11:32:51
【问题描述】:
致我的previous question,来自数据集,我如何才能在 20 分钟的时间间隔内使用它。
我尝试了两种解决方案,但它们都显示相同的结果。当我尝试将数据集转换为不同的时间间隔(比如 20 分钟)时,我的数据集并未获取所有值。
是否可以将其转换为 data.frame() 而不是 data.table()。这是akrun给出的答案之一:
x y date time
1 2 1-1-01 15:00
2 5 1-1-01 17:00
3 1 1-1-01 18:00
5 7 1-1-01 21:00
2 6 1-1-01 22:00
6 3 1-1-01 23:00
9 2 2-1-01 01:00
6 1 2-1-01 04:00
.....
library(data.table)
DT <- setDT(df1)[, {tmp <- as.numeric(substr(time,1,2))
list(time=sprintf('%02d:00', min(tmp):max(tmp)))}, date]
df1[DT, on=c('date', 'time')]
DT <- setDT(df1)[, list(time=sprintf('%02d:00', 0:23)) , date]
res <- df1[DT, on=c('date', 'time')
][,{tmp <- which(!(is.na(x) & is.na(y)))
.SD[tmp[1L]:tmp[length(tmp)]]}]
res
library(zoo)
res[, c('x', 'y') :=lapply(.SD, na.approx), .SDcols= x:y]
【问题讨论】:
-
能把整个代码封装在这里吗?
-
您的原始数据是一小时间隔。告诉我们 x 和 y 将如何以 20 分钟的间隔按比例划分?或者你有高频数据?
-
@Robert 是的,按比例......我确实有高频数据,但它不是连续的......有时我有分钟数据,但有时我有时间间隔在小时......所以我试图有一个中等的数据集..
-
@RomanLuštrik 我已经封装了代码..你能再看看这个问题吗?谢谢
标签: r