2013-04-23 3 views
3

Я извлекаю некоторые данные с сервера и получаю около 200 объектов временных рядов, все из них различной длины. Это не работает, поэтому нужно объединить их в один объект и написать NA в тех положениях, где нет доступных данных. Также для каждой серии у меня есть несколько переменных. Я пробовал с петлей, но все еще не работает, должен быть более элегантный способ сортировки этого. Например предположим, у меня есть следующие:Как слить много временных рядов с разной длиной в R

library(zoo) 
    a=zoo(matrix(rnorm(300), 100, 3),Sys.Date()-100:1) 
    b=zoo(matrix(rnorm(375), 125, 3),Sys.Date()-125:1) 
    c=zoo(matrix(rnorm(525), 175, 3),Sys.Date()-175:1) 
    d=zoo(matrix(rnorm(450), 150, 3),Sys.Date()-150:1) 
    e=list(a,b,c,d) 
    z=do.call(merge,e) 

EDIT: это работает

+0

@Joshua Ulrich спасибо за ваш ответ. Да, это работает для этого примера, но обратите внимание, что я получаю более 200 серий. Если нет другого способа, я сделаю это, но, возможно, есть альтернатива, создающая список или что-то подобное. – nopeva

+0

Если 'file.names' является символьным вектором, содержащим имена файлов, тогда' z <- read.zoo (file.names, ... other arguments ...) 'будет читать их все и объединять их для создания' z '. –

ответ

4

Вы можете использовать do.call вместе с merge. Он итеративно объединяет список временных рядов зоопарка.

do.call(merge,list(a,b,c,d)) 

Я думаю, что недостающие значения должны быть заполнены NA.

+0

спасибо! Я только что редактировал код. Я попытался, но не знаю, как извлечь одну конкретную переменную из одной конкретной серии, скажем, вторую переменную b-серии. – nopeva

+0

Проверьте, есть ли у вас дубликаты имен в списке объектов зоопарка. Если это так, 'do.call (merge, ...)' будет производить некоторые странные имена кодов. Вы можете назначить уникальные имена кодов перед слиянием или позаботиться о именах столбцов после операции слияния. – cryo111

+0

Вот что я имею в виду: 'library (zoo); a = зоопарк (data.frame (a = rnorm (10,0,0.1)), 1:10); b = зоопарк (data.frame (b = rnorm (10,0,0.1)), 1:10); do.call (слияние, список (a, b)); do.call (merge, list (a, a)); 'Последняя строка производит странные имена кодов, поскольку исходные не уникальны (i, e. Оба являются' a'). – cryo111

1

Если вы хотите добавить объекты зоопарка в качестве новых столбцов, функция cbind - ваш друг.

data <- cbind(a,b,c,d) 

Красота объектов зоопарка заключается в том, что они могут быть оборваны. Следовательно, значения NA автоматически возвращаются, когда длина таймсеров различается. Кроме того, у зоопарка есть многопользовательская функция многопользовательского автозапуска, среди прочего:

plot(data) 
Смежные вопросы