2013-08-05 6 views
1

동물원 목록이있는 경우 목록 색인 ([]])과 날짜별로 특정 값을 참조하려면 어떻게해야합니까? 예를 들면 다음과 같습니다.동물원 목록에 인덱싱

require("zoo") 
require("tseries") 
require("lubridate") 

z = zoo(c(1,2,3), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1"))) 
z1 = zoo(c(1,2,3), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1"))) 
z2 = zoo(c(10,20,30), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1"))) 
z3 = zoo(c(100,200,300), as.Date(c("2000/1/1", "2000/2/1", "2000/3/1"))) 
> l = list(z1,z2,z3) 
> l 
[[1]] 
2000-01-01 2000-02-01 2000-03-01 
     1   2   3 

[[2]] 
2000-01-01 2000-02-01 2000-03-01 
     10   20   30 

[[3]] 
2000-01-01 2000-02-01 2000-03-01 
     100  200  300 

내 목표는 색인에서 해당 월의 열 번호가있는 각 행의 값을 반환하는 것입니다. 위의 데이터에 대한 출력은 다음과 같습니다.

1, 20, 300 (표시 할 가장 쉬운 것은 동물원 개체, 벡터 일 수 있음). 나는 그것이 필요한 방식으로 강요 할 것이다.

내가 코드에 노력했습니다 방법은 (다른 사람의 사이에서)입니다 :

monthNumbs = month(index(l[[1]])) 
l[[monthNumbs]][index(l)] 

나는이 구조적으로 잘못 알고; 하지만 데이터 구조를 보는 방법입니다.

## loop through the index of the list 
## for each zoo object l[[x]] you get months index 
## and you compare it to current index 
unlist(lapply(seq_along(l), 
     function(x)l[[x]][month(index(l[[x]]))==x])) 
[1] 1 20 300 

편집 또 다른 대안 xts 패키지 사용 : 모든 경우

를 어떤 도움을 내가 당신의 질문을 이해하면

+0

내가 300', 당신은 30', 1, 20 '을받을 수 있나요 당신은, (1), (20)'을 뜻하는지 이해하지 않습니다. 이걸 분명히 해줄 수 있니? – agstudy

+0

예! 편집 됨. – StatsViaCsh

+0

모든 동물원 개체에 동일한 색인이 있습니까? – agstudy

답변

3

, 당신이 예를 들어이 작업을 수행 할 수 있다고 생각 ... 좋은 것 귀하의 zoo 개체가 동일한 인덱스를 가지고 있다면 매트릭스 구조를 얻기 위해 병합 할 수 있습니다 :

library(xts) 
mm <- do.call(merge,lapply(l,as.xts)) 
      c.1..2..3. c.10..20..30. c.100..200..300. 
2000-01-01   1   10    100 
2000-02-01   2   20    200 
2000-03-01   3   30    300 

그런 다음이 같은 diagonales 값을 얻을 :

as.matrix(mm)[col(mm)==row(mm)] 
+0

매우 근사합니다. 고마워요. – StatsViaCsh