TLDR:R中是否有一个函数/包,它允许绘制/比较两个不同长度的时间序列数据集?(不是绘制两条时间序列数据线,而是将每个数据集的值分别作为x和y使用)。这就是最终的情节可能是什么样子:

对于这个问题,让我们想象一下,我在实验室里有两个传感器,同时测量热电偶的温度和电压。然后将这些数据存储为时间序列数据。但是,由于这些数据是在两个不同的设备上测量的,所以时间戳不同,测量数据的频率也不同。现在,我想将这些数据与温度相匹配(这是评估热电偶时的标准图)。我该怎么做?
我创建了一些示例数据:
x_datetime <- as.POSIXct(paste("2022-10-21 10:00:",sprintf("%02.0f", seq(0,59,4)), sep = ""))
x_values <- seq(3,17,1)
y_datetime <- as.POSIXct(paste("2022-10-21 10:00:",sprintf("%02.0f", seq(1,59,3)), sep = ""))
y_values <- seq(0.4, 4.2, 0.2)
x <- data.frame(x_datetime, x_values)
y <- data.frame(y_datetime, y_values)我能想到的一个解决方案是计算给定时间框架的平均值(例如10秒),并使用这个方法绘制数据。为了计算平均值,我找到了一个不错的解决方案here。对于x,代码如下所示:
#Variant 1, using dplyr
library("dplyr")
x$time_bucket <- as.POSIXct(round(as.numeric(x$x_datetime)/10)*10, origin='1970-01-01')
x_means <- x %>%
group_by(time_bucket) %>%
summarize(mean(x_values))
#Variant 2, using data.table and lubridate
library("data.table")
library("lubridate")
x_dat <- as.data.table(x)
x_dat <- x_dat[, lapply(.SD, mean), .(x_datetime = round_date(x_datetime, "10 seconds"))]此解决方案将需要手动选择所需的时间框架(在本例中为10秒),根据该时间框架,我们要计算平均值。
因为这个问题看起来应该很常见,所以我想应该有一种更简单、更容易自动化和可能更少资源密集型的方法来比较这些数据集。
一如既往,谢谢你的帮助!
发布于 2022-10-21 13:58:04
在处理不规则时间序列时,xts是您的朋友!
library(xts)
x_xts <- xts(x$x_values, order.by = x$x_datetime)
period.apply(x_xts, endpoints(x_xts, 'seconds', 10), mean) |>
align.time(10) |>
print()
y_xts <- xts(y$y_values, order.by = y$y_datetime)
period.apply(y_xts, endpoints(y_xts, 'seconds', 10), mean) |>
align.time(10) |>
print()https://stackoverflow.com/questions/74153797
复制相似问题