[R] transform(_data,...) using strptime gives an error

amvds at xs4all.nl amvds at xs4all.nl
Sun Jul 19 12:26:35 CEST 2009


I have timstamped data like this:

> sd[1:10,]
             Tstamp Density Mesh50 Mesh70 Mesh100 Mesh150 Mesh200
2  2009/02/27 07:00    30.5    0.7   10.7    21.4    32.8    41.6
3  2009/02/27 08:00    32.2    1.6   12.4    23.3    34.5    43.0
4  2009/02/27 09:00    32.7    4.8   13.0    24.0    35.1    43.5
5  2009/02/27 10:00    26.7    0.3    6.5    17.6    28.1    36.9
6  2009/02/27 11:00    26.6    0.9    6.6    17.0    28.6    37.9
7  2009/02/27 12:00    23.3    6.3    3.4    14.0    25.5    34.6
8  2009/02/27 13:00    25.2    1.1    5.1    15.4    27.3    36.8
9  2009/02/27 14:00    28.6    0.2    8.7    19.4    30.9    40.0
10 2009/02/27 15:00    28.0    0.6    8.0    18.6    30.2    39.3
11 2009/02/27 16:00    28.3    0.9    8.3    18.9    30.5    39.5

The timstamps are character vectors:

> str(sd)
'data.frame':   591 obs. of  7 variables:
 $ Tstamp : chr  "2009/02/27 07:00" "2009/02/27 08:00" "2009/02/27 09:00"
"2009/02/27 10:00" ...
 $ Density: num  30.5 32.2 32.7 26.7 26.6 23.3 25.2 28.6 28 28.3 ...
 $ Mesh50 : num  0.7 1.6 4.8 0.3 0.9 6.3 1.1 0.2 0.6 0.9 ...
 $ Mesh70 : num  10.7 12.4 13 6.5 6.6 3.4 5.1 8.7 8 8.3 ...
 $ Mesh100: num  21.4 23.3 24 17.6 17 14 15.4 19.4 18.6 18.9 ...
 $ Mesh150: num  32.8 34.5 35.1 28.1 28.6 25.5 27.3 30.9 30.2 30.5 ...
 $ Mesh200: num  41.6 43 43.5 36.9 37.9 34.6 36.8 40 39.3 39.5 ...
 - attr(*, "na.action")=Class 'exclude'  Named int [1:58] 1 88 89 90 250
318 319 320 321 322 ...
  .. ..- attr(*, "names")= chr [1:58] "1" "88" "89" "90" ...

Trying to transform the timestamped character vector 'in place' using
transform gives this error message:

> sd<-transform(sd,Tstamp=strptime(Tstamp,format='%Y/%m/%d %H:%M'))
Error in `[<-.data.frame`(`*tmp*`, inx[matched], value = list(Tstamp =
list( :
  replacement element 1 has 9 rows, need 591

Why? It beats me...

I do have a backup of course:

td<-strptime(sd$Tstamp,format='%Y/%m/%d %H:%M')
sd<-data.frame(Tstamp=td, sd[2:7])

this works fine but is one step more complicated. Something I miss about
transform()?

Thanks in advance,
Alex van der Spek




More information about the R-help mailing list