Hello Enrico, 2016-09-08 10:41 GMT-03:00 Enrico Schumann <e...@enricoschumann.net>:
> Hi Veronica, > > please see inline. > > On Thu, 08 Sep 2016, Veronica Andreo <veroand...@gmail.com> writes: > > > Hello Luisfo and Enrico, > > > > Thanks for your help! I've been testing both > > solutions... results differ for the same date (I > > changed both functions to use ISO8601). And I added > > contiguous dates, to see how they handle the > > start-end of the week. > > > > So, here the results: > > > > ### one example > > d <- c("2010-08-21","2010-08-22","2010-08-23","2010-08-24") > > iso_start_end <- function(d) { > > d <- as.Date(d) > > wday <- as.POSIXlt(d)$wday > > data.frame(date = d, > > week = format(d, "%V"), > > starts = d - wday + 1, > > ends = d + 7 - wday) > > } > > iso_start_end(d) > > > > date week starts ends > > 1 2010-08-21 33 2010-08-16 2010-08-22 > > 2 2010-08-22 33 2010-08-23 2010-08-29 > > 3 2010-08-23 34 2010-08-23 2010-08-29 > > 4 2010-08-24 34 2010-08-23 2010-08-29 > > Yes, the second date makes no sense, and it happens > because Sunday is 0 (and not 7). My bad. Here is > a fixed version: > > iso_start_end <- function(d) { > d <- as.Date(d) > wday <- as.POSIXlt(d)$wday > wday[wday == 0] <- 7 > data.frame(date = d, > week = format(d, "%V"), > starts = d - wday + 1, > ends = d + 7 - wday) > } > > > > ### the other example: > > dd <- as.Date(strptime('2010-08-21', format="%Y-%m-%d", tz="GMT")) > > ref.date <- as.Date(strptime(paste0(year(dd),"-01-01"), > format="%Y-%m-%d")) > > bound.dates <- ref.date + 7 * (isoweek(dd)) + c(0,6) > > bound.dates > > [1] "2010-08-20" "2010-08-26" > > You can use the function "weekdays" to see check the > results. > > > weekdays(bound.dates) > [1] "Friday" "Thursday" > > > So, researching a bit more and inspired by those > > examples, I eventually came up with this solution > > that seems to work fine... I share in case that any > > other has a similar problem: > > > > # get ISOweek for my vector of dates > > week_iso<-ISOweek(d) > > > > # vector with the format %Y-W%V-1 for start day of the ISO week > > week_iso_day1 <- paste(week_iso,1, sep="-") > > > > # vector with the format %Y-W%V-7 for end day of the ISO week > > week_iso_day7 <- paste(week_iso, 7, sep="-") > > > > # use ISOweek2date > > data.frame(date= d, week_iso = week_iso, start = > ISOweek2date(week_iso_day1), end = ISOweek2date(week_iso_day7) > > > > date week_iso start end > > 1 2010-08-21 2010-W33 2010-08-16 2010-08-22 > > 2 2010-08-22 2010-W33 2010-08-16 2010-08-22 > > 3 2010-08-23 2010-W34 2010-08-23 2010-08-29 > > 4 2010-08-24 2010-W34 2010-08-23 2010-08-29 > > The updated 'iso_start_end' gives the same result. > > date week starts ends > 1 2010-08-21 33 2010-08-16 2010-08-22 > 2 2010-08-22 33 2010-08-16 2010-08-22 > 3 2010-08-23 34 2010-08-23 2010-08-29 > 4 2010-08-24 34 2010-08-23 2010-08-29 > Yes! Again, thanks for your time and help! Best, Vero [[alternative HTML version deleted]] ______________________________________________ R-help@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.