If I well understood your question , I think you can do this for example:
## 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
EDIT Another alternative using xts
package:
If all your zoo
objects have teh same index, you can merge them to get a matrix structure:
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
Then you get the diagonales values like this :
as.matrix(mm)[col(mm)==row(mm)]