Могу ли я иметь массивы или аналогичную структуру данных в качестве элементов фрейма данных? - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно что-то вроде ниже для фрейма данных?

   Label        Time          Value
    "X"       [0, 1, 2]   [1.1, 1.5, 2.1] 
    "Y"       [0, 1, 2]   [2.1, 3.1, 4.5]
    "Z"       [0, 1, 2]   [3.3, 3.5, 4.2]

Я хотел бы иметь фрейм данных со столбцом, представляющим метку временного ряда, другой столбец для атрибута времени и другой для временного ряда. В идеале длины векторов / рядов не равны.

Если это невозможно, пожалуйста, посоветуйте, как лучше всего смоделировать данные, для которых у меня есть десятки тысяч временных рядов, возможно, различной длины, каждый из которых связан с многокомпонентная этикетка.

Моя проблема в том, что у меня есть фрейм данных в формате:

ID  Type  Num  Tag  Time  Value
X    A     1    T1   0.0   1.1
             ...
X    A     1    T1   0.9   2.1
             ...
X    A     6    T4   0.0   3.1
             ...
X    A     6    T4   0.6   4.5
             ...
Y    C     5    T3   0.0   3.3
             ...
Y    C     5    T3   0.8   4.2

Я ищу что-то вроде этого:

ID  Type  Num  Tag         Time               Value
X    A     1    T1   c(0.0, ..., 0.9)   c(1.1, ..., 2.1)
                  ...
X    A     6    T4   c(0.0, ..., 0.6)   c(3.1, ..., 4.5) 
                  ...
X    C     5    T3   c(0.0, ..., 0.8)   c(3.3, ..., 4.2) 
                  ...

Лучшее, чего я достиг до сих пор нужно сократить векторы до одинаковой длины, а затем использовать каждый из атрибутов времени в качестве столбца со значениями, отсортированными по.

* СПАСИБО *

1 Ответ

0 голосов
/ 22 апреля 2020

Вы всегда можете сохранить список в data.frame, но, возможно, попробуйте что-то вроде ниже:

library(tidyr)
library(dplyr)

dat = data.frame(ID=rep(c("X","Y"),c(4,2)),
Type=rep(c("A","C"),c(4,2)),
Num=rep(c(1,6,5),each=2),
Tag=rep(c("T1","T4","T3"),each=2),
Time=c(0,0.9,0,0.6,0,.8),
Value=c(1.1,2.1,3.1,4.5,3.3,4.2))

dat %>% nest(data=c(Value,Time))
# A tibble: 3 x 5
  ID    Type    Num Tag   data            
  <fct> <fct> <dbl> <fct> <list>          
1 X     A         1 T1    <tibble [2 × 2]>
2 X     A         6 T4    <tibble [2 × 2]>
3 Y     C         5 T3    <tibble [2 × 2]>

Вы можете получить доступ к данным следующим образом:

dat_nested = dat %>% nest(data=c(Value,Time))
dat_nested$data[[1]]
# A tibble: 2 x 2
  Value  Time
  <dbl> <dbl>
1   1.1   0  
2   2.1   0.9
...