On Tue, 3 Jan 2012, David Winsemius wrote:
Maybe we need to backtrack a bit.
Yes. I've been trying to do this but still have too little experience with
R to be successful on my own.
You originally were complaining about an error that said you had
duplicated index entries as you attempted to make a zoo object. I assumed,
incorrectly it now appears, that you understood that an index in a zoo
object was a vector. You now seem to be admitting that you were trying to
use an entire dataframe as your index. As the acronym goes,
... DDT.
My understanding, apparently incorrect, was that read.zoo() converted a
data frame to a zoo object with the date column as the index vector. From
the read.zoo help page:
file: character string or strings giving the name of the file(s) which
the data are to be read from/written to. ... ‘file’ can be a
‘connection’ or a ‘data.frame’ (e.g., resulting from a previous
‘read.table’ call) that is subsequently processed to a ‘"zoo"’
series.
Based on this, I created a subset for a single parameter:
burns.tds <- subset(chemdata, stream == 'BurnsCrk', select = c(site,
sampdate, param == 'TDS', quant), drop = T)
This provides three columns:
site sampdate quant
599 BC-3 1992-03-27 0.1
600 BC-3 1992-04-30 0.1
601 BC-3 1992-05-30 0.1
603 BC-3 1992-06-19 0.1
1214 BC-3 1992-07-20 0.1
1215 BC-3 1992-08-10 0.1
Then, to create the zoo object,
burns.tds.z <- read.zoo(burns.tds, split = 1, index = 2)
Right. If you had said it was a dataframe, I would have suggested:
burns.tds[ !duplicated(burns.tds) , ]
But that would only identify entire duplicated rows; it would not cure the
misguided notion of creating a zoo-index from a dataframe.
Where did I go astray in trying to create a zoo-index with this procedure?
How do I extract zoo objects from a data frame?
You still have not really described what your are trying to do ... or with
what data you are trying to do it with.
I have a data frame with water quality sampling data and I'm now trying to
plot time series of specific chemical concentrations (y axis) as a function
of their irregular collection over a period of 30 years or less. I want to
plot the time series for each site along the stream as a separate line in
the same panel.
You might want to think about taking that sampdate which is now a factor
and turinging it into a data object which would then satisfy the
requirements of an index for a zoo object.
I had run the read.table() function again and forgot to convert the date
column from a factor to a date. I've now done this but the result is still
the same:
str(burns.tds)
'data.frame': 2472 obs. of 3 variables:
$ site : Factor w/ 137 levels "BC-0.5","BC-1",..: 5 5 5 5 5 5 5 5 5 5
$ sampdate: Date, format: "1992-03-27" "1992-04-30" ...
$ quant : num 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 8.08 ...
burns.tds.z <- read.zoo(burns.tds, split = 1, index = 2)
Error in merge.zoo(C-0.5 = c(0, 0.01, 0.01, 0.06, 0.18, NA, 76.56, :
series cannot be merged with non-unique index entries in a series
In addition: Warning messages:
1: In zoo(rval4[[i]], ix[[i]]) :
some methods for “zoo” objects do not work if the index entries in
‘order.by’ are not unique
I want to learn how to get data into zoo objects for time series analyses
so I greatly appreciate the help provided here.
Rich
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.