2013-08-01 4 views
0

하나의 동물원 (아래의 myZoo2)에있는 값을 조회 할 열 이름으로 사용하는 데이터 구조 (이상적으로는 동물원)를 얻으려면 정렬 조회를 시도하고 있습니다. 다른 (myZoo)의 값. 간단한 예 :동물원의 값을 다른 동물원의 열 조회로 사용

require('zoo') 
require('tseries') 

dates = c('1/1/2000','1/2/2000','1/3/2000') 
z1 = zoo(c(1,2,3),dates) 
z2 = zoo(c(4,5,6),dates) 
z3 = zoo(c(7,8,9),dates) 
myZoo = merge(z1,z2,z3) 
colnames(myZoo) = c('a', 'b', 'c') 

z4 = zoo(c('c', 'b', 'a'), dates) 
z5 = zoo(c('b','a','b'), dates) 
z6 = zoo(c('c', 'c', 'a'), dates) 
myZoo2 = merge(z4,z5,z6) 

myZoo 
     a b c 
1/1/2000 1 4 7 
1/2/2000 2 5 8 
1/3/2000 3 6 9 

myZoo2 
     z4 z5 z6 
1/1/2000 c b c 
1/2/2000 b a c 
1/3/2000 a b a 

I 출력을 찾고 있어요 :

1/1/2000 7 4 7 
1/2/2000 5 2 8 
1/3/2000 3 6 3 

I 형태의 여러 다른 표현하려고했는데 :

myZoo[,colnames=z2] 

뿐만 아니라 익명 함수를/적용 등 미리 감사드립니다 ...

답변

2

먼저 데이터 포인트의 "좌표"를 얻어야합니다. 네가 원하는거야.

match(index(myZoo2), index(myZoo))은 2 개의 동물원 개체의 색인과 일치하고 match(as.vector(myZoo2), names(myZoo))은 열 번호 목록을 가져옵니다.

그런 다음 myZoocoord으로 서브 세트하여 원하는 값을 얻습니다. 여전히 데이터를 수동으로 동물원 객체로 "마사지"해야합니다.

coord <- cbind(match(index(myZoo2), index(myZoo)), match(as.vector(myZoo2), names(myZoo))) 

coord 
##  [,1] [,2] 
## [1,] 1 3 
## [2,] 2 2 
## [3,] 3 1 
## [4,] 1 2 
## [5,] 2 1 
## [6,] 3 2 
## [7,] 1 3 
## [8,] 2 3 
## [9,] 3 1 


zoo(matrix(as.matrix(myZoo)[coord], nrow = nrow(myZoo)), order.by = index(myZoo)) 
##    
## 1/1/2000 7 4 7 
## 1/2/2000 5 2 8 
## 1/3/2000 3 6 3 
+0

정확히 내가 요청한대로 수행합니다. 감사합니다. – StatsViaCsh