2013-04-23 2 views
3

서버에서 일부 데이터를 가져와 길이가 다른 모든 시계열 객체를 약 200 개 가져옵니다. 이것은 작동하지 않기 때문에 하나의 객체로 병합하고 NA가없는 위치에 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) 

편집 : 당신은 merge과 함께 do.call을 사용할 수 있습니다

+0

@Joshua Ulrich가 답장을 보내 주셔서 감사합니다. 네,이 예제에서는 작동하지만 200 개 이상의 시리즈를 가져옵니다. 다른 방법이 없다면이 작업을 수행 할 것이지만 어쩌면 목록이나 비슷한 것을 만드는 대안이있을 수 있습니다. – nopeva

+0

'file.names'가 파일 이름을 가지고있는 문자 벡터라면 'z <- read.zoo (file.names, ... other arguments ...)'는 그것들을 모두 읽어 들여 합쳐'z '. –

답변

4

이 작동합니다. 반복적으로 동물원 시계열 목록을 병합합니다.

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

필자는 누락 된 값을 NA로 채워야한다고 생각합니다.

+0

감사합니다! 방금 코드를 편집했습니다. 나는 시도했지만 하나의 특정 시리즈에서 하나의 특정 변수를 추출하는 방법을 모르는 b 시리즈의 두 번째 변수를 말합니다. – nopeva

+0

동물원 목록에 중복 된 이름이 있는지 확인하십시오. 그렇다면'do.call (merge, ...)'는 이상한 colnames를 생성 할 것이다. 병합 전에 고유 한 colnames를 지정하거나 병합 작업 후에 colnames를 처리 할 수 ​​있습니다. – 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 (merge, list (a, b)); do.call (merge, list (a, a));'원래 줄이 유일하지 않으므로 마지막 줄은 이상한 colnames를 생성합니다 (i, e 둘 다'a'입니다). – cryo111

1

동물원 개체를 새 열로 추가하려는 경우 cbind 기능이 친구입니다.

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

동물원의 아름다움은 그들이 불규칙 할 수 있다는 것입니다. 따라서 timeseries의 길이가 다른 경우 NA 값이 자동으로 반환됩니다. 또한 동물원에는 다른 많은 것들 중에서도 유용한 다 변수시 계 자동 완성 기능이 있습니다.

plot(data) 
관련 문제