Skip to content

convert zoo object to "standard" R object so I can plot and output to csv file

8 messages · Henry, Gabor Grothendieck, R. Michael Weylandt

#
Another newbie question
I got the 1 minute spine interpolation and 15 mean aggregation working with
many thanks to Gabor Grothendieck using Zoo functions.  I got a tip from
Hasan Diwan to look at xts but it seemed I would make better progress using
code from Gabor.

Now I'm having trouble plotting this zoo object.  I'm thinking I want a
function to "split" the zoo object back to a regular R object with x time
values and y values so I can plot using plot functions I'm familiar with.

What is the vector name that has the values (e.g. the first value is
432.2189)

I also got the 15 minute aggregation mean working - I'm happy about that
also.

In addition next I'll want to write out a csv. file of the 15min block
aggregated mean data.

Here is the trial data and code I used so far.


Lines <- "10/11/2011 23:30:01     432.22
10/11/2011 23:31:17     432.32
10/11/2011 23:35:00     432.32
10/11/2011 23:36:18     432.22
10/11/2011 23:37:18     432.72
10/11/2011 23:39:19     432.23
10/11/2011 23:40:02     432.23
10/11/2011 23:45:00     432.23
10/11/2011 23:45:20     429.75
10/11/2011 23:46:20     429.65
10/11/2011 23:50:00     429.65
10/11/2011 23:51:22     429.75
10/11/2011 23:55:01     429.75
10/11/2011 23:56:23     429.55
10/12/2011 0:00:07      429.55
10/12/2011 0:01:24      429.95
10/12/2011 0:05:00      429.95
10/12/2011 0:06:25      429.85
10/12/2011 0:10:00      429.85
10/12/2011 0:11:26      428.85
10/12/2011 0:15:00      428.85
10/12/2011 0:20:03      428.85
10/12/2011 0:21:29      428.75
10/12/2011 0:25:01      428.75
10/12/2011 0:30:01      428.75
10/12/2011 0:31:31      428.75"

library(zoo)
library(chron)

fmt <- "%m/%d/%Y %H:%M:%S"
toChron <- function(d, t) as.chron(paste(d, t), format = fmt)

z <- read.zoo(text = Lines, index = 1:2, FUN = toChron)

# 1 minute spline fit
m1 <- times("00:01:00")
g <- seq(trunc(start(z), m1), end(z), by = m1)
na.spline(z, xout = g) # this did what I want but what is the vector name?

# 15 minute aggregates
m15 <- times("00:15:00")
ag15 <- aggregate(z, trunc(time(z), m15), mean)

the results of the na.spline(z, xout = g) function below
(10/11/11 23:30:00) (10/11/11 23:31:00) (10/11/11 23:32:00) (10/11/11
23:33:00) (10/11/11 23:34:00) (10/11/11 23:35:00) 
           432.2189            432.2950            432.3869           
432.4584            432.4545            432.3200 
(10/11/11 23:36:00) (10/11/11 23:37:00) (10/11/11 23:38:00) (10/11/11
23:39:00) (10/11/11 23:40:00) (10/11/11 23:41:00) 
           432.1639            432.5834            432.7443           
432.3624            432.2095            433.8208 
(10/11/11 23:42:00) (10/11/11 23:43:00) (10/11/11 23:44:00) (10/11/11
23:45:00) (10/11/11 23:46:00) (10/11/11 23:47:00) 
           436.3606            438.0969            437.2974           
432.2300            428.9265            430.6503 
(10/11/11 23:48:00) (10/11/11 23:49:00) (10/11/11 23:50:00) (10/11/11
23:51:00) (10/11/11 23:52:00) (10/11/11 23:53:00) 
           430.8493            430.2351            429.6500           
429.6715            429.8502            429.9054 
(10/11/11 23:54:00) (10/11/11 23:55:00) (10/11/11 23:56:00) (10/11/11
23:57:00) (10/11/11 23:58:00) (10/11/11 23:59:00) 
           429.8623            429.7522            429.6074           
429.4636            429.3664            429.3678 
(10/12/11 00:00:00) (10/12/11 00:01:00) (10/12/11 00:02:00) (10/12/11
00:03:00) (10/12/11 00:04:00) (10/12/11 00:05:00) 
           429.5200            429.8310            430.0703           
430.1312            430.0707            429.9500 
(10/12/11 00:06:00) (10/12/11 00:07:00) (10/12/11 00:08:00) (10/12/11
00:09:00) (10/12/11 00:10:00) (10/12/11 00:11:00) 
           429.8495            429.9134            430.0879           
430.1446            429.8500            429.1407 
(10/12/11 00:12:00) (10/12/11 00:13:00) (10/12/11 00:14:00) (10/12/11
00:15:00) (10/12/11 00:16:00) (10/12/11 00:17:00) 
           428.6042            428.4933            428.6367           
428.8500            428.9834            429.0264 
(10/12/11 00:18:00) (10/12/11 00:19:00) (10/12/11 00:20:00) (10/12/11
00:21:00) (10/12/11 00:22:00) (10/12/11 00:23:00) 
           429.0031            428.9376            428.8542           
428.7773            428.7315            428.7217 
(10/12/11 00:24:00) (10/12/11 00:25:00) (10/12/11 00:26:00) (10/12/11
00:27:00) (10/12/11 00:28:00) (10/12/11 00:29:00) 
           428.7330            428.7498            428.7594           
428.7615            428.7588            428.7541 
(10/12/11 00:30:00) (10/12/11 00:31:00) 
           428.7500            428.7491 

the results from when I enter ag15 in the R command line - which looks
correct

(10/11/11 23:30:00) (10/11/11 23:45:00) (10/12/11 00:00:00) (10/12/11
00:15:00) (10/12/11 00:30:00) 
           432.3229            430.0471            429.6667           
428.8000            428.7500 




--
View this message in context: http://r.789695.n4.nabble.com/convert-zoo-object-to-standard-R-object-so-I-can-plot-and-output-to-csv-file-tp4398302p4398302.html
Sent from the R help mailing list archive at Nabble.com.
#
?write.zoo

Perhaps with sep = "," if you have multiple columns.

Michael
On Fri, Feb 17, 2012 at 2:56 PM, Henry <hccoles at lbl.gov> wrote:
#
On Fri, Feb 17, 2012 at 2:56 PM, Henry <hccoles at lbl.gov> wrote:
If z is a zoo object then

plot(z)

or

library(lattice)
xyplot(z)

will plot it.  See ?plot.zoo and ?xyplot.zoo
4 days later
#
Gabor,
Thanks very much.
I have all the zoo functions to get 1 minute aggregation and 15 min. means
working and now able to write out to a file/etc.

One question on the 15 min. mean results.

m1 <- times("00:01:00")
g <- seq(trunc(start(z),m1),end(z),by = m1)
z1<-na.approx(z,xout = g)
m15 <- times("00:15:00")
ag15 <- aggregate(z1,trunc(time(z1),m15),mean)

Does the value of ag15 get assigned to the "center" of the time, front or
rear?
Can this be defined?
It seems aggregate(z1,trunc(time(z1),m15),mean) is getting the mean and
"assigning" it to the first time stamp, not a time stamp assigned to 7.5
minutes from the first 1 minute data point used to get the mean.

Is there an option to "create" a new regular timestamp on 15 periods but
centered or reporting on 7.5 minute periods?

Thanks.

--
View this message in context: http://r.789695.n4.nabble.com/convert-zoo-object-to-standard-R-object-so-I-can-plot-and-output-to-csv-file-tp4398302p4412622.html
Sent from the R help mailing list archive at Nabble.com.
#
On Wed, Feb 22, 2012 at 9:54 PM, Henry <hccoles at lbl.gov> wrote:
The by argument of aggregate.zoo defines the time index (as discussed
in ?aggregate.zoo) so time index of ag15 is trunc(time(z1), m15);
therefore, to push it ahead by 7.5 minutes just use trunc(time(z1),
m15) + as.numeric(m15)/2 in its place.
#
Another simple question - trying to specify xlim in a zoo plot and getting
error
my plot line is
plot(z1,
ylim=c(-100,3000),xlim=c(chron("10/30/2011","00:00:00"),chron("10/30/2011","00:20:00")),type="b",xlab="",ylab="1
Minute Fit",cex.lab=1.3)
Error in substring(paste("0", v$day, sep = ""), first = nchar(paste(v$day)))
: 
  invalid substring argument(s)

Most of the complete code pasted below.....
fmt<-"%m/%d/%Y %H:%M:%S"  # describe the date/time format in the file
tail1<-function(x) tail(x,1)
z<-read.zoo("Cooling-1.txt",FUN=as.chron,format=fmt,sep="\t",header=TRUE,aggregate=tail1)

par(oma=c(6,1,4,2)) # set the outside space boundaries

par(mfrow=c(2,1)) # set the number of graphs (rows,cols) going on one page

# plot the original data
par(mar=c(1.1, 5, .9, 0.5))
plot(z, ylim=c(-100,3000),type="b",xlab="",ylab="Raw
Data",col="red",cex.lab=1.3)
grid(nx=NA,ny=NULL,lwd=.5,lty=1,col="red")

# calculate and plot the 1 minute straight line interpolation 
m1 <- times("00:01:00")
g <- seq(trunc(start(z),m1),end(z),by = m1)
z1<-na.approx(z,xout = g)

#plot the 1 minute linear interpolation fit
par(mar=c(1.1, 5, .9, 0.5))
#the following plot line generates the error
plot(z1,
ylim=c(-100,3000),xlim=c(chron("10/30/2011","00:00:00"),chron("10/30/2011","00:20:00")),type="b",xlab="",ylab="1
Minute Fit",cex.lab=1.3)
grid(nx=NA,ny=NULL,lwd=.5,lty=1,col="darkgrey")



--
View this message in context: http://r.789695.n4.nabble.com/convert-zoo-object-to-standard-R-object-so-I-can-plot-and-output-to-csv-file-tp4398302p4415078.html
Sent from the R help mailing list archive at Nabble.com.
#
On Thu, Feb 23, 2012 at 3:06 PM, Henry <hccoles at lbl.gov> wrote:
Most???????????

Read the last two lines of every message to r-help.
#
If you could just construct the zoo object you want to plot and then
use dput() on it to create a plain-text representation (safe for
emailing) that'd make it easiest for us to help you. We can't do much
right now since we don't have the text file in question.

Michael

On Thu, Feb 23, 2012 at 3:21 PM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote: