I am trying to coerce a data frame column from character to datetime using strptime but keep getting an error because the length of the coerced object is always 9. What am I doing wrong here: .................................................................> ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds[,1] [,2] [1,] "1" "02/27/92 23:03:20" [2,] "2" "02/27/92 22:29:56"> > q <- strptime(ds[,2], "%m/%d/%y %H:%M:%S"); q[1] "1992-02-27 23:03:20" "1992-02-27 22:29:56"> > ds[,2] <- qError in "[<-"(`*tmp*`, , 2, value = q) : number of items to replace is not a multiple of replacement length> > length(q)[1] 9 ................................................................. --Rich Richard Kittler AMD TDG 408-749-4099
You have forgotten as.POSIXct is needed too. On Mon, 14 Jun 2004 richard.kittler at amd.com wrote:> I am trying to coerce a data frame column from character to datetime using strptime but keep getting an error because the length of the coerced object is always 9. What am I doing wrong here: > > ................................................................. > > ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds > [,1] [,2] > [1,] "1" "02/27/92 23:03:20" > [2,] "2" "02/27/92 22:29:56" > > > > q <- strptime(ds[,2], "%m/%d/%y %H:%M:%S"); q > [1] "1992-02-27 23:03:20" "1992-02-27 22:29:56" > > > > ds[,2] <- q > Error in "[<-"(`*tmp*`, , 2, value = q) : number of items to replace is not a multiple of replacement length > > > > length(q) > [1] 9 > > ................................................................. > > --Rich > > Richard Kittler > AMD TDG > 408-749-4099 > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html > >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
Thank you! The next step in the conversion still fails and I can't seem to find any examples in the archives. The result of the function 'as.POSIXct(strptime())' within the 'sapply' comes back as numeric rather than POSIXct as expected:> ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds[,1] [,2] [1,] "1" "02/27/92 23:03:20" [2,] "2" "02/27/92 22:29:56"> q <- sapply(ds[,2], function(x) as.POSIXct(strptime(x,"%m/%d/%y %H:%M:%S"))) > class(q)[1] "numeric"> q02/27/92 23:03:20 02/27/92 22:29:56 699260600 699258596 --Rich Richard Kittler AMD TDG 408-749-4099 -----Original Message----- From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk] Sent: Monday, June 14, 2004 12:05 PM To: Kittler, Richard Cc: r-help at stat.math.ethz.ch Subject: Re: [R] Coercing a dataframe column to datetime You have forgotten as.POSIXct is needed too. On Mon, 14 Jun 2004 richard.kittler at amd.com wrote:> I am trying to coerce a data frame column from character to datetime using strptime but keep getting an error because the length of the coerced object is always 9. What am I doing wrong here: > > ................................................................. > > ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds > [,1] [,2] > [1,] "1" "02/27/92 23:03:20" > [2,] "2" "02/27/92 22:29:56" > > > > q <- strptime(ds[,2], "%m/%d/%y %H:%M:%S"); q > [1] "1992-02-27 23:03:20" "1992-02-27 22:29:56" > > > > ds[,2] <- q > Error in "[<-"(`*tmp*`, , 2, value = q) : number of items to replace > is not a multiple of replacement length > > > > length(q) > [1] 9 > > ................................................................. > > --Rich > > Richard Kittler > AMD TDG > 408-749-4099 > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595
I understand I can do it directly with only one column. It was meant to be a simple case to illustrate my problem. I need to do it over many columns in the real application. --Rich Richard Kittler AMD TDG 408-749-4099 -----Original Message----- From: Petr Pikal [mailto:petr.pikal at precheza.cz] Sent: Tuesday, June 15, 2004 11:10 PM To: Kittler, Richard Cc: r-help at stat.math.ethz.ch Subject: RE: [R] Coercing a dataframe column to datetime On 15 Jun 2004 at 11:31, richard.kittler at amd.com wrote:> Thank you! The next step in the conversion still fails and I can't > seem to find any examples in the archives. The result of the function > 'as.POSIXct(strptime())' within the 'sapply' comes back as numeric > rather than POSIXct as expected: > > > ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds > [,1] [,2] > [1,] "1" "02/27/92 23:03:20" > [2,] "2" "02/27/92 22:29:56" > > q <- sapply(ds[,2], function(x) as.POSIXct(strptime(x,"%m/%d/%y > > %H:%M:%S"))) class(q) > [1] "numeric" > > q > 02/27/92 23:03:20 02/27/92 22:29:56 > 699260600 699258596Hi Why do you use sapply? ds is included in some list? If not you can apply as.POSIXct directly to ds. as.POSIXct(strptime(ds[,2],"%m/%d/%y %H:%M:%S")) If you use sapply (or apply) the result is a vector or array which has to have the same class for all its elements. Therefore you get numeric representation of our dates (I suppose :-). Cheers Petr> > --Rich > > Richard Kittler > AMD TDG > 408-749-4099 > > -----Original Message----- > From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk] > Sent: Monday, June 14, 2004 12:05 PM > To: Kittler, Richard > Cc: r-help at stat.math.ethz.ch > Subject: Re: [R] Coercing a dataframe column to datetime > > > You have forgotten as.POSIXct is needed too. > > On Mon, 14 Jun 2004 richard.kittler at amd.com wrote: > > > I am trying to coerce a data frame column from character to datetime > > using strptime but keep getting an error because the length of the > > coerced object is always 9. What am I doing wrong here: > > > > ................................................................. > > > ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds > > [,1] [,2] > > [1,] "1" "02/27/92 23:03:20" > > [2,] "2" "02/27/92 22:29:56" > > > > > > q <- strptime(ds[,2], "%m/%d/%y %H:%M:%S"); q > > [1] "1992-02-27 23:03:20" "1992-02-27 22:29:56" > > > > > > ds[,2] <- q > > Error in "[<-"(`*tmp*`, , 2, value = q) : number of items to replace > > is not a multiple of replacement length > > > > > > length(q) > > [1] 9 > > > > ................................................................. > > > > --Rich > > > > Richard Kittler > > AMD TDG > > 408-749-4099 > > > > ______________________________________________ > > R-help at stat.math.ethz.ch mailing list > > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide! > > http://www.R-project.org/posting-guide.html > > > > > > -- > Brian D. Ripley, ripley at stats.ox.ac.uk > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) 1 South > Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, > UK Fax: +44 1865 272595 > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.htmlPetr Pikal petr.pikal at precheza.cz
Sorry to bother you all with this one. I determined that the problem is solved if I use 'lapply' rather than 'sapply'. Since sapply returns the result as a vector it must be making a best guess of numeric for the class of the result (?) --Rich Richard Kittler AMD TDG 408-749-4099 -----Original Message----- From: Kittler, Richard Sent: Tuesday, June 15, 2004 11:32 AM To: 'Prof Brian Ripley' Cc: r-help at stat.math.ethz.ch Subject: RE: [R] Coercing a dataframe column to datetime Thank you! The next step in the conversion still fails and I can't seem to find any examples in the archives. The result of the function 'as.POSIXct(strptime())' within the 'sapply' comes back as numeric rather than POSIXct as expected:> ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds[,1] [,2] [1,] "1" "02/27/92 23:03:20" [2,] "2" "02/27/92 22:29:56"> q <- sapply(ds[,2], function(x) as.POSIXct(strptime(x,"%m/%d/%y > %H:%M:%S"))) > class(q)[1] "numeric"> q02/27/92 23:03:20 02/27/92 22:29:56 699260600 699258596 --Rich Richard Kittler AMD TDG 408-749-4099 -----Original Message----- From: Prof Brian Ripley [mailto:ripley at stats.ox.ac.uk] Sent: Monday, June 14, 2004 12:05 PM To: Kittler, Richard Cc: r-help at stat.math.ethz.ch Subject: Re: [R] Coercing a dataframe column to datetime You have forgotten as.POSIXct is needed too. On Mon, 14 Jun 2004 richard.kittler at amd.com wrote:> I am trying to coerce a data frame column from character to datetime using strptime but keep getting an error because the length of the coerced object is always 9. What am I doing wrong here: > > ................................................................. > > ds <- cbind(1:2, c("02/27/92 23:03:20", "02/27/92 22:29:56")); ds > [,1] [,2] > [1,] "1" "02/27/92 23:03:20" > [2,] "2" "02/27/92 22:29:56" > > > > q <- strptime(ds[,2], "%m/%d/%y %H:%M:%S"); q > [1] "1992-02-27 23:03:20" "1992-02-27 22:29:56" > > > > ds[,2] <- q > Error in "[<-"(`*tmp*`, , 2, value = q) : number of items to replace > is not a multiple of replacement length > > > > length(q) > [1] 9 > > ................................................................. > > --Rich > > Richard Kittler > AMD TDG > 408-749-4099 > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html > >-- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595