R 使用动物园';s值作为另一个动物园中的列查找

R 使用动物园';s值作为另一个动物园中的列查找,r,time-series,zoo,R,Time Series,Zoo,我正在尝试创建一个排序查找,以获得一个数据结构(理想情况下是一个zoo),该结构使用一个zoo(下面的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

我正在尝试创建一个排序查找,以获得一个数据结构(理想情况下是一个zoo),该结构使用一个zoo(下面的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]
以及匿名函数/应用等。提前感谢…

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

match(index(myZoo2)、index(myZoo))将匹配2个zoo对象的索引,
match(as.vector(myZoo2)、names(myZoo))将获得列号列表

然后使用
coord
myZoo
子集,以获得所需的值。您仍然需要手动将数据“按摩”回zoo对象

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
coord