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

我正在寻找输出:

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

我一直在尝试表单的多种不同表达方式:

myZoo[,colnames=z2]

以及匿名函数/应用等。在此先感谢...

4

1 回答 1

2

您需要首先获取所需数据点的“坐标”。

match(index(myZoo2), index(myZoo))将匹配 2 个动物园对象的索引,match(as.vector(myZoo2), names(myZoo))并将获得列号列表。

然后你myZoo使用子集coord来获得你想要的值。您仍然需要手动将数据“按摩”回动物园对象。

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
于 2013-08-01T04:43:12.947 回答