rajeshj at cse.iitm.ac.in
2010-Oct-01 05:59 UTC
[R] Converting a dataframe column from string to datetime
Hi, I have a dataframe column of the form v<-c("Fri Feb 05 20:00:01.43000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:06.34000 2010") I need to convert this to datetime form. I did the following.. lapply(v,function(x){strptime(x, "%a %b %d %H:%M:%OS %Y")}) This gives me a list that looks like this... [[1]] [1] "2010-02-05 20:00:01.43" [[2]] [1] "2010-02-05 20:00:02.274" [[3]] [1] "2010-02-05 20:00:02.274" [[4]] [1] "2010-02-05 20:00:06.34" However, when I do an unlist...I gets converted to something like this... sec min hour mday mon year wday yday isdst sec min hour mday mon year wday yday isdst sec 1.430 0.000 20.000 5.000 1.000 110.000 5.000 35.000 0.000 2.274 0.000 20.000 5.000 1.000 110.000 5.000 35.000 0.000 2.274 min hour mday mon year wday yday isdst sec min hour mday mon year wday yday isdst 0.000 20.000 5.000 1.000 110.000 5.000 35.000 0.000 6.340 0.000 20.000 5.000 1.000 110.000 5.000 I want it to become a dataframe column except for a change in the datatype to datetime...how can I achieve this? [[alternative HTML version deleted]]
Is it okay with you? Reduce("rbind", lapply(lapply(v,function(x){strptime(x, "%a %b %d %H:%M:%OS %Y")}), as.character)) -- View this message in context: http://r.789695.n4.nabble.com/Converting-a-dataframe-column-from-string-to-datetime-tp2853709p2869793.html Sent from the R help mailing list archive at Nabble.com.
jim holtman
2010-Oct-01 09:00 UTC
[R] Converting a dataframe column from string to datetime
I think you want to use as.POSIXct to get the date value:> v<-c("Fri Feb 05 20:00:01.43000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:06.34000 2010") > x <- as.POSIXct(v, format= "%a %b %d %H:%M:%OS %Y") > x[1] "2010-02-05 20:00:01 EST" "2010-02-05 20:00:02 EST" [3] "2010-02-05 20:00:02 EST" "2010-02-05 20:00:06 EST"> str(x)POSIXct[1:4], format: "2010-02-05 20:00:01" "2010-02-05 20:00:02" ... On Fri, Oct 1, 2010 at 1:59 AM, rajeshj at cse.iitm.ac.in <rajeshj at cse.iitm.ac.in> wrote:> > Hi, > > I have a dataframe column of the form > v<-c("Fri Feb 05 20:00:01.43000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:06.34000 2010") > > I need to convert this to datetime form. I did the following.. > > lapply(v,function(x){strptime(x, "%a %b %d %H:%M:%OS %Y")}) > > This gives me a list that looks like this... > > [[1]] > [1] "2010-02-05 20:00:01.43" > [[2]] > [1] "2010-02-05 20:00:02.274" > [[3]] > [1] "2010-02-05 20:00:02.274" > [[4]] > [1] "2010-02-05 20:00:06.34" > > However, when I do an unlist...I gets converted to something like this... > > sec ? ? ?min ? ?hour ? ?mday ? ? mon ? ?year ? ?wday ? ?yday ? isdst ? ? sec ? ? min ? ?hour ? ?mday ? ? mon ? ?year ? ?wday ? ?yday ? isdst ? ? sec > ?1.430 ? 0.000 ?20.000 ? 5.000 ? 1.000 110.000 ? 5.000 ?35.000 ? 0.000 ? 2.274 ? 0.000 ?20.000 ? 5.000 ? 1.000 110.000 ? 5.000 ?35.000 ? 0.000 ? 2.274 > ? ?min ? ?hour ? ?mday ?mon ? ?year ? ?wday ? ?yday ? isdst ? ? sec ? ? min ? ?hour ? ?mday ? ? mon ? ?year ? ?wday ? ?yday ? isdst > ?0.000 ?20.000 ? 5.000 ? 1.000 110.000 ? 5.000 ?35.000 ? 0.000 ? 6.340 ? 0.000 ?20.000 ? 5.000 ? 1.000 110.000 ? 5.000 > > I want it to become a dataframe column except for a change in the datatype to datetime...how can I achieve this? > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?
MacQueen, Don
2010-Oct-01 15:21 UTC
[R] Converting a dataframe column from string to datetime
You’re working too hard. Use this: tms <- as.POSIXct(strptime(v, "%a %b %d %H:%M:%OS %Y")) Take note of the fact that there are two types of datetime objects: POSIXct and POSIXlt. Your unlist() gave what seemed a strange result because you used on an “lt” object. Had you given it a “ct” object it would have made sense. To see, try lapply(v,function(x){as.POSIXct(strptime(x, "%a %b %d %H:%M:%OS %Y"))}) But using lapply() was more complicated than necessary. -Don On 9/30/10 10:59 PM, "rajeshj@cse.iitm.ac.in" <rajeshj@cse.iitm.ac.in> wrote: Hi, I have a dataframe column of the form v<-c("Fri Feb 05 20:00:01.43000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:02.274000 2010","Fri Feb 05 20:00:06.34000 2010") I need to convert this to datetime form. I did the following.. lapply(v,function(x){strptime(x, "%a %b %d %H:%M:%OS %Y")}) This gives me a list that looks like this... [[1]] [1] "2010-02-05 20:00:01.43" [[2]] [1] "2010-02-05 20:00:02.274" [[3]] [1] "2010-02-05 20:00:02.274" [[4]] [1] "2010-02-05 20:00:06.34" However, when I do an unlist...I gets converted to something like this... sec min hour mday mon year wday yday isdst sec min hour mday mon year wday yday isdst sec 1.430 0.000 20.000 5.000 1.000 110.000 5.000 35.000 0.000 2.274 0.000 20.000 5.000 1.000 110.000 5.000 35.000 0.000 2.274 min hour mday mon year wday yday isdst sec min hour mday mon year wday yday isdst 0.000 20.000 5.000 1.000 110.000 5.000 35.000 0.000 6.340 0.000 20.000 5.000 1.000 110.000 5.000 I want it to become a dataframe column except for a change in the datatype to datetime...how can I achieve this? [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://BLOCKEDstat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://BLOCKEDwww.BLOCKEDR-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. -- Don MacQueen Environmental Protection Department Lawrence Livermore National Laboratory 925 423-1062 [[alternative HTML version deleted]]