在 R 中搜索时间序列数据的线性插值时,我经常na.approx()从zoo包中找到要使用的建议。
然而,对于不规则的时间序列,我遇到了问题,因为插值在间隙数量上均匀分布,没有考虑该值的关联时间戳。
我找到了一个围绕使用的解决方案approxfun(),但我想知道是否有一个更干净的解决方案,最好基于tsibble具有tidyverts包系列函数的对象?
以前的答案依赖于通过填补空白将不规则日期网格扩展为规则网格。然而,当插值期间应考虑白天时,这会导致问题。
这是一个(修订后的)最小示例,其中包含 POSIXct 时间戳而不是仅日期:
library(tidyverse)
library(zoo)
df <- tibble(date = as.POSIXct(c("2000-01-01 00:00", "2000-01-02 02:00", "2000-01-05 00:00")),
value = c(1,NA,2))
df %>%
mutate(value_int_wrong = na.approx(value),
value_int_correct = approxfun(date, value)(date))
# A tibble: 3 x 4
date value value_int_wrong value_int_correct
<dttm> <dbl> <dbl> <dbl>
1 2000-01-01 00:00:00 1 1 1
2 2000-01-02 02:00:00 NA 1.5 1.27
3 2000-01-05 00:00:00 2 2 2
Run Code Online (Sandbox Code Playgroud)
有什么想法如何(有效)处理这个问题吗?感谢您的支持!
(这是我的第一篇文章,所以(i)我希望不要破坏太多规则,(ii)必须在外部存储示例图
我想要显示不规则网格时间序列数据,其中显示的参数也是纬度或水深等地理测量的函数.包含日期(日期),地理参数水深(dep)和感兴趣盐度(sal)参数的示例数据文件以及生成的初步散点图ggplot2存储在我们的
密码:时间序列
ggplot图的R代码是:
# Load required packages
library(ggplot2)
library(data.table)
library(colorRamps)
library(scales)
# Import spatial timeseries data
df <- data.table(read.csv("timeseries_example.csv"))
df$date <- as.POSIXct(strptime(df$date, format="%m/%d/%Y", tz="GMT"))
# Scatterplot with color representing the z parameter
Fig <-
ggplot(data=df, aes(date, dep, col=Sal))+
geom_point()+
scale_y_reverse()+
scale_colour_gradientn(colours = matlab.like2(7), oob=squish)
tiff("./example_timeseries_R_ggplot.tiff", width = 200, height = 100,
units = 'mm', res = 300, compression = 'lzw')
Fig
dev.off()
Run Code Online (Sandbox Code Playgroud)
由于数据在空间和时间上间隔不规则,因此使用ggplot geom_tile()函数绘图需要插值.
免费提供的软件海洋数据视图(ODV)实现了这种插值,我想重现与R一起存储在我们自己的云(上面的链接)中的ODV图.
由于此问题类似于先前解决的问题,我尝试在更精细的日期网格上插入参数sal并使用包进行插入akima.但是,这不适用于作为POSIXct对象的x参数.
有人有解决方案吗?