Preparing non-equal length or sample freq time series for dtwclust

问题描述 投票:0回答:1

寻求有关如何准备多个不同长度(和采样频率)的时间序列以使用 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 系列做到这一点?

非常感谢任何指导 - 我已经搜索但没有找到足够接近我的问题的解决方案。谢谢。

r time series hierarchical-clustering tsibble
1个回答
0
投票

幸运的是,我找到了一个相关的问题并且可以从中解决问题。 当按其他数据框变量分组时,如何生成包含命名向量的列表列?

可能有比这更优雅的解决方案,但会放在这里供与我有同样困境的任何人使用。

    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。

© www.soinside.com 2019 - 2024. All rights reserved.