rc<-list(c(
123,321,234,543,654,768,986,987,246,284),c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"))
# the matrix has rownames that are used as identifiers and columns
# of time. 1 years worth of data. Thats the native format
test<-matrix(seq(1,120, by=1), nrow=10,dimnames=rc)
test
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
123 1 11 21 31 41 51 61 71 81 91 101 111
321 2 12 22 32 42 52 62 72 82 92 102 112
234 3 13 23 33 43 53 63 73 83 93 103 113
543 4 14 24 34 44 54 64 74 84 94 104 114
654 5 15 25 35 45 55 65 75 85 95 105 115
768 6 16 26 36 46 56 66 76 86 96 106 116
986 7 17 27 37 47 57 67 77 87 97 107 117
987 8 18 28 38 48 58 68 78 88 98 108 118
246 9 19 29 39 49 59 69 79 89 99 109 119
284 10 20 30 40 50 60 70 80 90 100 110 120
#The desired result would be a merged zoo object with the row names used as
the colnames of the multiple zoo series
test2<-matrix(test,nrow=12, byrow=F)
g<-zoo(test2[,1],frequency=12)
MYZOO <-merge(g,test2[,2:10])
# the result MYZOO is a zoo object, but we've lost the row names in the
transformation of the matrix
#So
colnames(MYZOO)<-row.names(test)
#Fixes that problem. Is there a more elegant way to do this???
# now this zoo object needs to be "swept" out of a much longer zoo
object
# with the same column names.. The 'sweep' function is "-"
Sweep works normally by sweeping out a vector from an array (by column or by
row
sweep(x, MARGIN, STATS, FUN="-", check.margin=TRUE, ...)
so in my example x would be a long yearmon zoo object with the same
column names
as MYZOO above, but decades of data. MARGIN would be rows and the STATS
to sweep out would be the values in MYZOO.
test3<-matrix(seq(1,720, by=1), ncol=10)
p<-zoo(test3[,1], freq=12)
longzoo<-merge(p,test3[,2:10])
colnames(longzoo)<-row.names(test)
what we want to do is to sweep out MYZOO from longzoo. I could just repeat
the data in MYZOO 6 times and then subtract MYZOO from longzoo, but thats
a potential memory buster in this situation
[[alternative HTML version deleted]]