Uwe Ligges
2021-Feb-22 16:09 UTC
[R] strptime, date and conversion of week number into POSIX
That monday does not exist. FOr the week before: strptime(paste0("2020-52","-1"),format="%Y-%W-%u") [1] "2020-12-28" One week later is no longer in 2020, so there is no 53th week. Best, Uwe Ligges On 22.02.2021 16:15, Patrick Giraudoux wrote:> Sorry to answer to myself, but the format was clearly incorrect in the > previous post. It should read, refering to the 1th day of the week: > > strptime(paste0(mydate,"-1"),format="%Y-%W-%u") > > It converts better, but with a NA on week 53 > >> strptime(paste0(pays$year_week,"-1"),format="%Y-%W-%u") > [1] "2020-01-06 CET" "2020-01-13 CET" "2020-01-20 CET" "2020-01-27 CET" > [5] "2020-02-03 CET" "2020-02-10 CET" "2020-02-17 CET" "2020-02-24 CET" > [9] "2020-03-02 CET" "2020-03-09 CET" "2020-03-16 CET" "2020-03-23 CET" > [13] "2020-03-30 CEST" "2020-04-06 CEST" "2020-04-13 CEST" "2020-04-20 CEST" > [17] "2020-04-27 CEST" "2020-05-04 CEST" "2020-05-11 CEST" "2020-05-18 CEST" > [21] "2020-05-25 CEST" "2020-06-01 CEST" "2020-06-08 CEST" "2020-06-15 CEST" > [25] "2020-06-22 CEST" "2020-06-29 CEST" "2020-07-06 CEST" "2020-07-13 CEST" > [29] "2020-07-20 CEST" "2020-07-27 CEST" "2020-08-03 CEST" "2020-08-10 CEST" > [33] "2020-08-17 CEST" "2020-08-24 CEST" "2020-08-31 CEST" "2020-09-07 CEST" > [37] "2020-09-14 CEST" "2020-09-21 CEST" "2020-09-28 CEST" "2020-10-05 CEST" > [41] "2020-10-12 CEST" "2020-10-19 CEST" "2020-10-26 CET" "2020-11-02 CET" > [45] "2020-11-09 CET" "2020-11-16 CET" "2020-11-23 CET" "2020-11-30 CET" > [49] "2020-12-07 CET" "2020-12-14 CET" "2020-12-21 CET" "2020-12-28 CET" > [53] NA "2021-01-04 CET" "2021-01-11 CET" "2021-01-18 CET" > [57] "2021-01-25 CET" "2021-02-01 CET" "2021-02-08 CET" > Warning message: > In strptime(paste0(pays$year_week, "-1"), format = "%Y-%W-%u") : > (0-based) yday 369 in year 2020 is invalid > > > Any idea on how to handle this ? > > > > > Le 22/02/2021 ? 15:26, Patrick Giraudoux a ?crit?: >> >> Dear all, >> >> I have a trouble trying to convert dates? given in character to POSIX. >> The date is expressed as a year then the week number e.g. "2020-01" >> (first week of 2020). I thought is can be converted as following: >> >> strptime(mydate,format="%Y-%W") >> >> %W refering to the week of the year as decimal number (00?53) using >> Monday as the first day of week (and typically with the first Monday >> of the year as day 1 of week 1), as indicated in the doc. >> >> However, I got this result, with the month fixed to 02 (february) and >> day 22 (only the year is? converted correctly): >> >> strptime(mydate,format="%Y-%W") [1] "2020-02-22 CET" "2020-02-22 CET" >> "2020-02-22 CET" "2020-02-22 CET" [5] "2020-02-22 CET" "2020-02-22 >> CET" "2020-02-22 CET" "2020-02-22 CET" [9] "2020-02-22 CET" >> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [13] "2020-02-22 >> CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [17] >> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" >> [21] "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 >> CET" [25] "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" >> "2020-02-22 CET" [29] "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 >> CET" "2020-02-22 CET" [33] "2020-02-22 CET" "2020-02-22 CET" >> "2020-02-22 CET" "2020-02-22 CET" [37] "2020-02-22 CET" "2020-02-22 >> CET" "2020-02-22 CET" "2020-02-22 CET" [41] "2020-02-22 CET" >> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [45] "2020-02-22 >> CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [49] >> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" >> [53] "2020-02-22 CET" "2021-02-22 CET" "2021-02-22 CET" "2021-02-22 >> CET" [57] "2021-02-22 CET" "2021-02-22 CET" "2021-02-22 CET" >> >> You'll find below a dump of "mydate" you can copy and paster if you >> need a try >> >> Any hint welcome... >> >> Best, >> >> Patrick >> >> mydate <- >> c("2020-01", "2020-02", "2020-03", "2020-04", "2020-05", "2020-06", >> "2020-07", "2020-08", "2020-09", "2020-10", "2020-11", "2020-12", >> "2020-13", "2020-14", "2020-15", "2020-16", "2020-17", "2020-18", >> "2020-19", "2020-20", "2020-21", "2020-22", "2020-23", "2020-24", >> "2020-25", "2020-26", "2020-27", "2020-28", "2020-29", "2020-30", >> "2020-31", "2020-32", "2020-33", "2020-34", "2020-35", "2020-36", >> "2020-37", "2020-38", "2020-39", "2020-40", "2020-41", "2020-42", >> "2020-43", "2020-44", "2020-45", "2020-46", "2020-47", "2020-48", >> "2020-49", "2020-50", "2020-51", "2020-52", "2020-53", "2021-01", >> "2021-02", "2021-03", "2021-04", "2021-05", "2021-06") >> > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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. >
Patrick Giraudoux
2021-Feb-22 16:23 UTC
[R] strptime, date and conversion of week number into POSIX
Thanks Uwe and? Bert, I got the essential now, and can manage. Date handling stays quite a challenge with a variable number of weeks in a year, but I can understand why. Means eye-control (or NA detection) of strptime conversion stays necessary... Best, Patrick Le 22/02/2021 ? 17:09, Uwe Ligges a ?crit?:> That monday does not exist. FOr the week before: > > strptime(paste0("2020-52","-1"),format="%Y-%W-%u") > [1] "2020-12-28" > > One week later is no longer in 2020, so there is no 53th week. > > Best, > Uwe Ligges > > > > > > On 22.02.2021 16:15, Patrick Giraudoux wrote: >> Sorry to answer to myself, but the format was clearly incorrect in the >> previous post. It should read, refering to the 1th day of the week: >> >> strptime(paste0(mydate,"-1"),format="%Y-%W-%u") >> >> It converts better, but with a NA on week 53 >> >>> strptime(paste0(pays$year_week,"-1"),format="%Y-%W-%u") >> ?? [1] "2020-01-06 CET"? "2020-01-13 CET"? "2020-01-20 CET" >> "2020-01-27 CET" >> ?? [5] "2020-02-03 CET"? "2020-02-10 CET"? "2020-02-17 CET" >> "2020-02-24 CET" >> ?? [9] "2020-03-02 CET"? "2020-03-09 CET"? "2020-03-16 CET" >> "2020-03-23 CET" >> [13] "2020-03-30 CEST" "2020-04-06 CEST" "2020-04-13 CEST" >> "2020-04-20 CEST" >> [17] "2020-04-27 CEST" "2020-05-04 CEST" "2020-05-11 CEST" >> "2020-05-18 CEST" >> [21] "2020-05-25 CEST" "2020-06-01 CEST" "2020-06-08 CEST" >> "2020-06-15 CEST" >> [25] "2020-06-22 CEST" "2020-06-29 CEST" "2020-07-06 CEST" >> "2020-07-13 CEST" >> [29] "2020-07-20 CEST" "2020-07-27 CEST" "2020-08-03 CEST" >> "2020-08-10 CEST" >> [33] "2020-08-17 CEST" "2020-08-24 CEST" "2020-08-31 CEST" >> "2020-09-07 CEST" >> [37] "2020-09-14 CEST" "2020-09-21 CEST" "2020-09-28 CEST" >> "2020-10-05 CEST" >> [41] "2020-10-12 CEST" "2020-10-19 CEST" "2020-10-26 CET" "2020-11-02 >> CET" >> [45] "2020-11-09 CET"? "2020-11-16 CET"? "2020-11-23 CET" "2020-11-30 >> CET" >> [49] "2020-12-07 CET"? "2020-12-14 CET"? "2020-12-21 CET" "2020-12-28 >> CET" >> [53] NA??????????????? "2021-01-04 CET"? "2021-01-11 CET" "2021-01-18 >> CET" >> [57] "2021-01-25 CET"? "2021-02-01 CET"? "2021-02-08 CET" >> Warning message: >> In strptime(paste0(pays$year_week, "-1"), format = "%Y-%W-%u") : >> ??? (0-based) yday 369 in year 2020 is invalid >> >> >> Any idea on how to handle this ? >> >> >> >> >> Le 22/02/2021 ? 15:26, Patrick Giraudoux a ?crit?: >>> >>> Dear all, >>> >>> I have a trouble trying to convert dates? given in character to POSIX. >>> The date is expressed as a year then the week number e.g. "2020-01" >>> (first week of 2020). I thought is can be converted as following: >>> >>> strptime(mydate,format="%Y-%W") >>> >>> %W refering to the week of the year as decimal number (00?53) using >>> Monday as the first day of week (and typically with the first Monday >>> of the year as day 1 of week 1), as indicated in the doc. >>> >>> However, I got this result, with the month fixed to 02 (february) and >>> day 22 (only the year is? converted correctly): >>> >>> strptime(mydate,format="%Y-%W") [1] "2020-02-22 CET" "2020-02-22 CET" >>> "2020-02-22 CET" "2020-02-22 CET" [5] "2020-02-22 CET" "2020-02-22 >>> CET" "2020-02-22 CET" "2020-02-22 CET" [9] "2020-02-22 CET" >>> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [13] "2020-02-22 >>> CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [17] >>> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" >>> [21] "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 >>> CET" [25] "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" >>> "2020-02-22 CET" [29] "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 >>> CET" "2020-02-22 CET" [33] "2020-02-22 CET" "2020-02-22 CET" >>> "2020-02-22 CET" "2020-02-22 CET" [37] "2020-02-22 CET" "2020-02-22 >>> CET" "2020-02-22 CET" "2020-02-22 CET" [41] "2020-02-22 CET" >>> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [45] "2020-02-22 >>> CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" [49] >>> "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" "2020-02-22 CET" >>> [53] "2020-02-22 CET" "2021-02-22 CET" "2021-02-22 CET" "2021-02-22 >>> CET" [57] "2021-02-22 CET" "2021-02-22 CET" "2021-02-22 CET" >>> >>> You'll find below a dump of "mydate" you can copy and paster if you >>> need a try >>> >>> Any hint welcome... >>> >>> Best, >>> >>> Patrick >>> >>> mydate <- >>> c("2020-01", "2020-02", "2020-03", "2020-04", "2020-05", "2020-06", >>> "2020-07", "2020-08", "2020-09", "2020-10", "2020-11", "2020-12", >>> "2020-13", "2020-14", "2020-15", "2020-16", "2020-17", "2020-18", >>> "2020-19", "2020-20", "2020-21", "2020-22", "2020-23", "2020-24", >>> "2020-25", "2020-26", "2020-27", "2020-28", "2020-29", "2020-30", >>> "2020-31", "2020-32", "2020-33", "2020-34", "2020-35", "2020-36", >>> "2020-37", "2020-38", "2020-39", "2020-40", "2020-41", "2020-42", >>> "2020-43", "2020-44", "2020-45", "2020-46", "2020-47", "2020-48", >>> "2020-49", "2020-50", "2020-51", "2020-52", "2020-53", "2021-01", >>> "2021-02", "2021-03", "2021-04", "2021-05", "2021-06") >>> >> >> >> ????[[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. >>[[alternative HTML version deleted]]