I am having trouble with creating a POSIXct object. If I create a variable of class Date first out of the date part of my data, I am ok, but if I just paste the date and time parts together and try and create the POSIXct object, I have problems. Here is a toy example created from the actual data which caused the problem. I am using R 2.0.1 on Windows XP.> # Data frame with dates and times, as character > PeopleData.dfStartDate StartTime 1 29/10/2001 15:26 2 7/12/2001 10:32 3 16/11/2001 13:58 4 28/11/2001 14:00 5 2/11/2001 15:22 6 26/11/2001 11:15> str(PeopleData.df)`data.frame': 6 obs. of 2 variables: $ StartDate: chr "29/10/2001" "7/12/2001" "16/11/2001" "28/11/2001" ... $ StartTime: chr "15:26" "10:32" "13:58" "14:00" ...> dput(PeopleData.df)structure(list(StartDate = c("29/10/2001", "7/12/2001", "16/11/2001", "28/11/2001", "2/11/2001", "26/11/2001"), StartTime = c("15:26", "10:32", "13:58", "14:00", "15:22", "11:15")), .Names = c("StartDate", "StartTime"), row.names = c("1", "2", "3", "4", "5", "6"), class = "data.frame")> BeginDate <- as.Date(PeopleData.df$StartDate,format="%d/%m/%Y") > BeginDate[1] "2001-10-29" "2001-12-07" "2001-11-16" "2001-11-28" "2001-11-02" [6] "2001-11-26"> # Create POSIXct date-time object without difficulty > BeginTime <- as.POSIXct(format(paste(BeginDate,PeopleData.df$StartTime),+ format="%Y/%m/%d %H:%M"))> BeginTime[1] "2001-10-29 15:26:00 New Zealand Standard Time" [2] "2001-12-07 10:32:00 New Zealand Standard Time" [3] "2001-11-16 13:58:00 New Zealand Standard Time" [4] "2001-11-28 14:00:00 New Zealand Standard Time" [5] "2001-11-02 15:22:00 New Zealand Standard Time" [6] "2001-11-26 11:15:00 New Zealand Standard Time"> # But not directly from the dates and times > BeginTime <-as.POSIXct(format(paste(PeopleData.df$StartDate,PeopleData.df$StartTime), + format="%d/%m/%Y %H:%M"))> BeginTime[1] "0029-10-20 New Zealand Standard Time" [2] "0007-12-20 New Zealand Standard Time" [3] "0016-11-20 New Zealand Standard Time" [4] "0028-11-20 New Zealand Standard Time" [5] "0002-11-20 New Zealand Standard Time" [6] "0026-11-20 New Zealand Standard Time"> # Format looks correct to me > paste(PeopleData.df$StartDate,PeopleData.df$StartTime)[1] "29/10/2001 15:26" "7/12/2001 10:32" "16/11/2001 13:58" "28/11/2001 14:00" [5] "2/11/2001 15:22" "26/11/2001 11:15" What I think might be causing the problem is the lack of a leading zero for some of the days (as in 7/12/2001). This doesn't phase as.Date though. David Scott _________________________________________________________________ David Scott Department of Statistics, Tamaki Campus The University of Auckland, PB 92019 Auckland NEW ZEALAND Phone: +64 9 373 7599 ext 86830 Fax: +64 9 373 7000 Email: d.scott at auckland.ac.nz Graduate Officer, Department of Statistics
Dear David I tried to reproduce your example. It is not exact the same. When I create a dataframe, character are transformed to factors except I use I() to protect "them".> PeopleData.df <- data.frame(StartDate = c("29/10/2001", "7/12/2001","16/11/2001", "28/11/2001", "2/11/2001", "26/11/2001"), StartTime = c("15:26", "10:32", "13:58", "14:00", "15:22", "11:15"))> str(PeopleData.df)data.frame': 6 obs. of 2 variables: $ StartDate: Factor w/ 6 levels "16/11/2001","2/..",..: 5 6 1 4 2 3 $ StartTime: Factor w/ 6 levels "10:32","11:15",..: 6 1 3 4 5 2 So there is a small difference to your dataframe. Then the following produces what you want> as.POSIXct(strptime(paste(PeopleData.df$StartDate,PeopleData.df$StartTime),format="%d/%m/%Y %H:%M")) [1] "2001-10-29 15:26:00 CET" "2001-12-07 10:32:00 CET" [3] "2001-11-16 13:58:00 CET" "2001-11-28 14:00:00 CET" [5] "2001-11-02 15:22:00 CET" "2001-11-26 11:15:00 CET" Regards, Christoph -------------------------------------------------------------- Christoph Buser <buser at stat.math.ethz.ch> Seminar fuer Statistik, LEO C13 ETH (Federal Inst. Technology) 8092 Zurich SWITZERLAND phone: x-41-44-632-4673 fax: 632-1228 http://stat.ethz.ch/~buser/ -------------------------------------------------------------- David Scott writes: > > I am having trouble with creating a POSIXct object. If I create a variable > of class Date first out of the date part of my data, I am ok, but if I > just paste the date and time parts together and try and create the POSIXct > object, I have problems. > > Here is a toy example created from the actual data which caused the > problem. I am using R 2.0.1 on Windows XP. > > > # Data frame with dates and times, as character > > PeopleData.df > StartDate StartTime > 1 29/10/2001 15:26 > 2 7/12/2001 10:32 > 3 16/11/2001 13:58 > 4 28/11/2001 14:00 > 5 2/11/2001 15:22 > 6 26/11/2001 11:15 > > str(PeopleData.df) > `data.frame': 6 obs. of 2 variables: > $ StartDate: chr "29/10/2001" "7/12/2001" "16/11/2001" "28/11/2001" ... > $ StartTime: chr "15:26" "10:32" "13:58" "14:00" ... > > dput(PeopleData.df) > structure(list(StartDate = c("29/10/2001", "7/12/2001", "16/11/2001", > "28/11/2001", "2/11/2001", "26/11/2001"), StartTime = c("15:26", > "10:32", "13:58", "14:00", "15:22", "11:15")), .Names = c("StartDate", > "StartTime"), row.names = c("1", "2", "3", "4", "5", "6"), class = > "data.frame") > > BeginDate <- as.Date(PeopleData.df$StartDate,format="%d/%m/%Y") > > BeginDate > [1] "2001-10-29" "2001-12-07" "2001-11-16" "2001-11-28" "2001-11-02" > [6] "2001-11-26" > > # Create POSIXct date-time object without difficulty > > BeginTime <- as.POSIXct(format(paste(BeginDate,PeopleData.df$StartTime), > + format="%Y/%m/%d %H:%M")) > > BeginTime > [1] "2001-10-29 15:26:00 New Zealand Standard Time" > [2] "2001-12-07 10:32:00 New Zealand Standard Time" > [3] "2001-11-16 13:58:00 New Zealand Standard Time" > [4] "2001-11-28 14:00:00 New Zealand Standard Time" > [5] "2001-11-02 15:22:00 New Zealand Standard Time" > [6] "2001-11-26 11:15:00 New Zealand Standard Time" > > # But not directly from the dates and times > > BeginTime <- > as.POSIXct(format(paste(PeopleData.df$StartDate,PeopleData.df$StartTime), > + format="%d/%m/%Y %H:%M")) > > BeginTime > [1] "0029-10-20 New Zealand Standard Time" > [2] "0007-12-20 New Zealand Standard Time" > [3] "0016-11-20 New Zealand Standard Time" > [4] "0028-11-20 New Zealand Standard Time" > [5] "0002-11-20 New Zealand Standard Time" > [6] "0026-11-20 New Zealand Standard Time" > > # Format looks correct to me > > paste(PeopleData.df$StartDate,PeopleData.df$StartTime) > [1] "29/10/2001 15:26" "7/12/2001 10:32" "16/11/2001 13:58" "28/11/2001 > 14:00" > [5] "2/11/2001 15:22" "26/11/2001 11:15" > > What I think might be causing the problem is the lack of a leading zero > for some of the days (as in 7/12/2001). This doesn't phase as.Date though. > > David Scott > > > > _________________________________________________________________ > David Scott Department of Statistics, Tamaki Campus > The University of Auckland, PB 92019 > Auckland NEW ZEALAND > Phone: +64 9 373 7599 ext 86830 Fax: +64 9 373 7000 > Email: d.scott at auckland.ac.nz > > > Graduate Officer, Department of Statistics > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
Well I skipped to the end so pardon me if I've missed something. My first reaction was to go and look at the excellent article by Gabor in RNews 2004-1 on dates (p.32 in particular)> as.POSIXct(strptime("7/12/2001 10:32",format = "%d/%m/%Y %H:%M"))[1] "2001-12-07 10:32:00 W. Australia Standard Time" as.POSIXct handles a limited number of formats and does not have a "format" parameter.> args(as.POSIXct)function (x, tz = "") So you need to use strptime. Tom> -----Original Message----- > From: r-help-bounces at stat.math.ethz.ch > [mailto:r-help-bounces at stat.math.ethz.ch]On Behalf Of David Scott > Sent: Tuesday, 31 May 2005 8:27 PM > To: r-help at stat.math.ethz.ch > Subject: [R] POSIX problem > > > > I am having trouble with creating a POSIXct object. If I > create a variable > of class Date first out of the date part of my data, I am ok, > but if I > just paste the date and time parts together and try and > create the POSIXct > object, I have problems. > > Here is a toy example created from the actual data which caused the > problem. I am using R 2.0.1 on Windows XP. > > > # Data frame with dates and times, as character > > PeopleData.df > StartDate StartTime > 1 29/10/2001 15:26 > 2 7/12/2001 10:32 > 3 16/11/2001 13:58 > 4 28/11/2001 14:00 > 5 2/11/2001 15:22 > 6 26/11/2001 11:15 > > str(PeopleData.df) > `data.frame': 6 obs. of 2 variables: > $ StartDate: chr "29/10/2001" "7/12/2001" "16/11/2001" > "28/11/2001" ... > $ StartTime: chr "15:26" "10:32" "13:58" "14:00" ... > > dput(PeopleData.df) > structure(list(StartDate = c("29/10/2001", "7/12/2001", "16/11/2001", > "28/11/2001", "2/11/2001", "26/11/2001"), StartTime = c("15:26", > "10:32", "13:58", "14:00", "15:22", "11:15")), .Names = c("StartDate", > "StartTime"), row.names = c("1", "2", "3", "4", "5", "6"), class = > "data.frame") > > BeginDate <- as.Date(PeopleData.df$StartDate,format="%d/%m/%Y") > > BeginDate > [1] "2001-10-29" "2001-12-07" "2001-11-16" "2001-11-28" "2001-11-02" > [6] "2001-11-26" > > # Create POSIXct date-time object without difficulty > > BeginTime <- > as.POSIXct(format(paste(BeginDate,PeopleData.df$StartTime), > + format="%Y/%m/%d %H:%M")) > > BeginTime > [1] "2001-10-29 15:26:00 New Zealand Standard Time" > [2] "2001-12-07 10:32:00 New Zealand Standard Time" > [3] "2001-11-16 13:58:00 New Zealand Standard Time" > [4] "2001-11-28 14:00:00 New Zealand Standard Time" > [5] "2001-11-02 15:22:00 New Zealand Standard Time" > [6] "2001-11-26 11:15:00 New Zealand Standard Time" > > # But not directly from the dates and times > > BeginTime <- > as.POSIXct(format(paste(PeopleData.df$StartDate,PeopleData.df$ > StartTime), > + format="%d/%m/%Y %H:%M")) > > BeginTime > [1] "0029-10-20 New Zealand Standard Time" > [2] "0007-12-20 New Zealand Standard Time" > [3] "0016-11-20 New Zealand Standard Time" > [4] "0028-11-20 New Zealand Standard Time" > [5] "0002-11-20 New Zealand Standard Time" > [6] "0026-11-20 New Zealand Standard Time" > > # Format looks correct to me > > paste(PeopleData.df$StartDate,PeopleData.df$StartTime) > [1] "29/10/2001 15:26" "7/12/2001 10:32" "16/11/2001 13:58" > "28/11/2001 > 14:00" > [5] "2/11/2001 15:22" "26/11/2001 11:15" > > What I think might be causing the problem is the lack of a > leading zero > for some of the days (as in 7/12/2001). This doesn't phase > as.Date though. > > David Scott > > > > _________________________________________________________________ > David Scott Department of Statistics, Tamaki Campus > The University of Auckland, PB 92019 > Auckland NEW ZEALAND > Phone: +64 9 373 7599 ext 86830 Fax: +64 9 373 7000 > Email: d.scott at auckland.ac.nz > > > Graduate Officer, Department of Statistics > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html >