寻求有关如何准备多个不同长度(和采样频率)的时间序列以使用 R 中的
dtwclust
包进行聚类的帮助。请注意,我的系列的采样频率为 15 或 30 分钟,日期/时间不是相关所以只存储为分钟索引。
从查看 ?tslist 构造函数,我需要创建一个时间序列列表。
我目前在 R data.table 中有长格式的数据,下面是玩具示例:
structure(list(new_id = structure(c("4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "4f755b0b0ba498f2d2e00c7951eaaeb9",
"a73d5cf68dee23eb83d5a8a59ac22312", "a73d5cf68dee23eb83d5a8a59ac22312",
"a73d5cf68dee23eb83d5a8a59ac22312", "a73d5cf68dee23eb83d5a8a59ac22312",
"a73d5cf68dee23eb83d5a8a59ac22312", "a73d5cf68dee23eb83d5a8a59ac22312",
"a73d5cf68dee23eb83d5a8a59ac22312", "a73d5cf68dee23eb83d5a8a59ac22312",
"a73d5cf68dee23eb83d5a8a59ac22312", "a73d5cf68dee23eb83d5a8a59ac22312",
"a73d5cf68dee23eb83d5a8a59ac22312", "a73d5cf68dee23eb83d5a8a59ac22312",
"a73d5cf68dee23eb83d5a8a59ac22312"), class = c("hash", "md5")),
value = c(500, 2400, 500, 2200, 500, 1400, 400, 600, 300,
900, 200, 800, 200, 800, 175, 800, 900, 600, 1700, 1700,
800, 700, 850, 750, 600, 500, 400, 350), elapsed_time = c(15,
10, 30, 20, 45, 30, 60, 40, 75, 50, 90, 60, 105, 70, 120,
80, 90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190,
200)), row.names = c(NA, -28L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x000001cfcb878c00>)
我觉得我尝试了一些想法但没有成功创建正确的数据结构。 我开始查看 tsibble,但它看起来不像可以将对象强制转换为 tslist。 有没有办法用 data.table 或 *pply 系列做到这一点?
非常感谢任何指导 - 我已经搜索但没有找到足够接近我的问题的解决方案。谢谢。
幸运的是,我找到了一个相关的问题并且可以从中解决问题。 当按其他数据框变量分组时,如何生成包含命名向量的列表列?
可能有比这更优雅的解决方案,但会放在这里供与我有同样困境的任何人使用。
library(tidyverse)
toy_res = toy %>%
group_by(new_id) %>%
summarise(named_vec = map2(list(value), list(elapsed_time),
~set_names(.x, .y)), .groups = "drop")
t_list <- toy_res$named_vec
names(t_list) = toy_res$new_id
t_list 现在可以在 dtwclust 中使用——除了这个玩具箱,因为我只提供了两个系列,它会出错。在我更大的数据集中它有效。
实际上 - 它“有效”但不遵守每个向量中的时间戳名称。这个答案仍然是一个 WIP。