Объединение векторов неравной длины в кадр данных

У меня есть список векторов, которые являются временным рядом неравной длины. Моя конечная цель должна вывести временной ряд на печать в a ggplot2 график. Я предполагаю, что я - более обеспеченное первое слияние векторов в кадре данных (где более короткие векторы будут расширены с NAS), также потому что я хочу экспортировать данные в табличном формате, таком как .csv, который будет просмотрен другими людьми.

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

> mylist
[[1]]
[1] "vector1"

[[2]]
[1] "vector2"

[[3]]
[1] "vector3"

и т.д.

Я знаю, что способ пойти состоит в том, чтобы использовать Hadley plyr пакет, но я предполагаю, что проблема состоит в том, что мой список содержит названия векторов, не самих векторов, поэтому если я ввожу:

do.call(rbind, mylist)

Я получаю один столбец df содержащий названия DFS, которую я хотел объединить.

> do.call(rbind, actives)
      [,1]           
 [1,] "vector1" 
 [2,] "vector2" 
 [3,] "vector3" 
 [4,] "vector4" 
 [5,] "vector5" 
 [6,] "vector6" 
 [7,] "vector7" 
 [8,] "vector8" 
 [9,] "vector9" 
[10,] "vector10"

и т.д.

Даже если я создаю список с объектом самостоятельно, я получаю пустой кадр данных:

mylist <- list(vector1, vector2)
mylist
[[1]]
        1         2         3         4         5         6         7         8         9        10        11        12 
0.1875000 0.2954545 0.3295455 0.2840909 0.3011364 0.3863636 0.3863636 0.3295455 0.2954545 0.3295455 0.3238636 0.2443182 
       13        14        15        16        17        18        19        20        21        22        23        24 
0.2386364 0.2386364 0.3238636 0.2784091 0.3181818 0.3238636 0.3693182 0.3579545 0.2954545 0.3125000 0.3068182 0.3125000 
       25        26        27        28        29        30        31        32        33        34        35        36 
0.2727273 0.2897727 0.2897727 0.2727273 0.2840909 0.3352273 0.3181818 0.3181818 0.3409091 0.3465909 0.3238636 0.3125000 
       37        38        39        40        41        42        43        44        45        46        47        48 
0.3125000 0.3068182 0.2897727 0.2727273 0.2840909 0.3011364 0.3181818 0.2329545 0.3068182 0.2386364 0.2556818 0.2215909 
       49        50        51        52        53        54        55        56        57        58        59        60 
0.2784091 0.2784091 0.2613636 0.2329545 0.2443182 0.2727273 0.2784091 0.2727273 0.2556818 0.2500000 0.2159091 0.2329545 
       61 
0.2556818 

[[2]]
        1         2         3         4         5         6         7         8         9        10        11        12 
0.2824427 0.3664122 0.3053435 0.3091603 0.3435115 0.3244275 0.3320611 0.3129771 0.3091603 0.3129771 0.2519084 0.2557252 
       13        14        15        16        17        18        19        20        21        22        23        24 
0.2595420 0.2671756 0.2748092 0.2633588 0.2862595 0.3549618 0.2786260 0.2633588 0.2938931 0.2900763 0.2480916 0.2748092 
       25        26        27        28        29        30        31        32        33        34        35        36 
0.2786260 0.2862595 0.2862595 0.2709924 0.2748092 0.3396947 0.2977099 0.2977099 0.2824427 0.3053435 0.3129771 0.2977099 
       37        38        39        40        41        42        43        44        45        46        47        48 
0.3320611 0.3053435 0.2709924 0.2671756 0.2786260 0.3015267 0.2824427 0.2786260 0.2595420 0.2595420 0.2442748 0.2099237 
       49        50        51        52        53        54        55        56        57        58        59        60 
0.2022901 0.2251908 0.2099237 0.2213740 0.2213740 0.2480916 0.2366412 0.2251908 0.2442748 0.2022901 0.1793893 0.2022901 

но

do.call(rbind.fill, mylist)
data frame with 0 columns and 0 rows

Я попытался преобразовать векторы в кадры данных, но существует нет cbind.fill функция, таким образом, plyr жалуется, что кадры данных имеют другую длину.

Таким образом, мои вопросы:

  • Действительно ли это - лучший подход? Следует иметь в виду, что цели a) ggplot2 график и b) таблица с временным рядом, чтобы быть просмотренным за пределами R

  • Что лучший способ состоит в том, чтобы получить список объектов, запускающихся со списка названий тех объектов?

  • Что лучший тип графика выделить шаблоны 60 timeseries? Масштаб является тем же, но я предсказываю, что будет большое сверхграфическое изображение. Так как это - анализ когорты, могло бы быть полезно использовать цвет для выделения различных когорт с точки зрения новизны (как непрерывная переменная). Но как постараться не сверхвыводиться на печать? Различия будут минимальны настолько фасетирующие, мог бы оставить средство просмотра не могущим схватить различие.

11
задан Roberto 29 July 2010 в 20:10
поделиться

3 ответа

Я думаю, что вы можете подходить к этому неправильно:

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

Поместите временной ряд в объекты zoo , объедините их, а затем используйте функцию my qplot.zoo для их построения. Это будет иметь дело с переключением из зоопарка в длинный фрейм данных.

Вот пример:

> z1 <- zoo(1:8, 1:8)
> z2 <- zoo(2:8, 2:8)
> z3 <- zoo(4:8, 4:8)
> nm <- list("z1", "z2", "z3")
> z <- zoo()
> for(i in 1:length(nm)) z <- merge(z, get(nm[[i]]))
> names(z) <- unlist(nm)
> z
  z1 z2 z3
1  1 NA NA
2  2  2 NA
3  3  3 NA
4  4  4  4
5  5  5  5
6  6  6  6
7  7  7  7
8  8  8  8
> 
> x.df <- data.frame(dates=index(x), coredata(x))
> x.df <- melt(x.df, id="dates", variable="val")
> ggplot(na.omit(x.df), aes(x=dates, y=value, group=val, colour=val)) + geom_line() + opts(legend.position = "none")
11
ответ дан 3 December 2019 в 08:28
поделиться

Если вы делаете это только потому, что ggplot2 (а также многие другие вещи) похожи на фреймы данных, то вам не хватает того, что вам нужно. данные в фреймах данных длинного формата. Да, вы просто объединили все переменные ответа в один столбец. Тогда у вас будет 1 или несколько других столбцов, которые определяют, что отличает эти ответы. Это лучший способ настроить его для таких вещей, как ggplot.

3
ответ дан 3 December 2019 в 08:28
поделиться

Вы не можете. data.frame () должен быть прямоугольным; но правила повторного использования гарантируют, что более короткие векторы будут расширены.

Так что здесь может быть другая ошибка - данные, которые вы хотите rbind , не подходят? - но трудно сказать, поскольку вы не привели воспроизводимого примера.

Правка Учитывая ваше обновление, вы получаете в точности то, что вы просили: список имен объединяется с помощью rbind . Если вы хотите, чтобы отображались базовые данные, вам нужно задействовать get () или другой метод доступа к данным.

0
ответ дан 3 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: