Convert Factor to Date/Time in R
Solution 1
You need to insert an as.character()
before parsing as a Datetime or Date.
A factor will always come back first as a number corresponding to its level.
You can save the conversion from factor to character by telling read.csv()
etc to no store as a factor: stringsAsFactors=FALSE
. You can also set that as a global option.
Once you have it as character, make sure you match the format string to your data:
R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S")
[1] "2013-06-01 08:07:00 CDT"
R>
Note the %Y-%m-%d
I used, as opposed to your %m/%d/%y
.
Edit on 3 Jan 2016: This is now much easier thanks to the anytime package which automagically converts from many types, including factor
, and does so without requiring a format string.
R> as.factor("2013-06-01 08:07:00")
[1] 2013-06-01 08:07:00
Levels: 2013-06-01 08:07:00
R>
R> library(anytime)
R> anytime(as.factor("2013-06-01 08:07:00"))
[1] "2013-06-01 08:07:00 CDT"
R>
R> class(anytime(as.factor("2013-06-01 08:07:00")))
[1] "POSIXct" "POSIXt"
R>
As you can see we just feed the factor variable into anytime()
and out comes the desired POSIXct type.
Solution 2
Try this
library(lubridate)
minuteave$minutes <- ymd_hms(minuteave$minutes)
this will return minuteave$minutes as a POSIXct object.
Hope this helps you.
Michelle
Updated on December 23, 2020Comments
-
Michelle over 3 years
This is the information contained within my dataframe:
## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",... ## dDdt: num 7.8564 2.318 ... ## minutes: POSIXlt, format: NA NA NA
I need to convert the minute of day column to a date/time format:
minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S")
I've tried
as.POSIXlt
,as.POSIXct
andas.Date
. None of which worked. Does anyone have ANY thoughts.The goal is to plot minutes vs. dDdt, but it won't let me plot in the specified time period that I want to as a factor. I have no idea what to try next...
-
David Arenburg about 10 yearsI think he already inserted the
as.character
the problem is that he has an error in the format imo -
Dirk Eddelbuettel about 10 yearsThanks, I noticed that too on second read and expanded my answer. The remaining problem (which your answer repeats) is the
as.POSIXlt
conversion (without extracting minutes).