Hello Jim, Thanks for this. I will study it. One thing, you wrote "# process each week, substituting the mean if Sunday exists". Even if Sunday's data does not exist, I need an entry for Sunday if Friday or Saturday (or both) exist. I don't yet understand what you wrote so I am not sure if that is the case. Bill
On Wed, Jan 22, 2014 at 10:04 PM, jim holtman <jholt...@gmail.com> wrote: > Here's one way of doing it. Does not use "complicated" IFs; just > splits the data and works on it. > > > x <- read.table(text = " Date nrec > + > + 1 2011-07-17 667 > + > + 2 2011-07-18 266 > + > + 3 2009-10-29 29 > + > + 4 2009-10-30 211 > + > + 5 2009-10-31 237 > + > + 6 2009-11-01 898", header = TRUE, as.is = TRUE) > > # convert to Date > > x$Date <- as.Date(x$Date) > > # add week of year > > x$week <- format(x$Date, "%Y%W") > > # add the day of week > > x$day <- format(x$Date, "%w") > > # process each week, substituting the mean if Sunday exists > > result <- do.call(rbind > + , lapply(split(x, x$week), function(.week){ > + means <- mean(.week$nrec[.week$day %in% c('0', '5', '6')]) > + .week$nrec[.week$day == '0'] <- means > + .week > + }) > + ) > > > > > > result > Date nrec week day > 200943.3 2009-10-29 29.0000 200943 4 > 200943.4 2009-10-30 211.0000 200943 5 > 200943.5 2009-10-31 237.0000 200943 6 > 200943.6 2009-11-01 448.6667 200943 0 > 201128 2011-07-17 667.0000 201128 0 > 201129 2011-07-18 266.0000 201129 1 > > x > Date nrec week day > 1 2011-07-17 667 201128 0 > 2 2011-07-18 266 201129 1 > 3 2009-10-29 29 200943 4 > 4 2009-10-30 211 200943 5 > 5 2009-10-31 237 200943 6 > 6 2009-11-01 898 200943 0 > > > > Jim Holtman > Data Munger Guru > > What is the problem that you are trying to solve? > Tell me what you want to do, not how you want to do it. > > > On Wed, Jan 22, 2014 at 6:33 AM, Bill <william...@gmail.com> wrote: > > Hello. I am trying to work out some complicated if() logic. > > I thought of using which() and if() but cannot get it. > > > > I have a dataframe that looks like this: > > > > head(deleteFridayTest) > > > > Date nrec > > > > 1 2011-07-17 667 > > > > 2 2011-07-18 266 > > > > 3 2009-10-29 29 > > > > 4 2009-10-30 211 > > > > 5 2009-10-31 237 > > > > 6 2009-11-01 898 > > > > I want to take the values in nrec for consecutive Friday, Saturday and > > Sundays and average them and replace Sundays value with that average. > > > > I came up with this: > > > > deleteFridayTest[dayOfWeek(deleteFridayTest$Date)=="Sun",]$nrec <- > > (deleteFridayTest[dayOfWeek(deleteFridayTest$Date)=="Sun",]$nrec + > > deleteFridayTest[dayOfWeek(deleteFridayTest$Date)=="Sat",]$nrec + > > deleteFridayTest[dayOfWeek(deleteFridayTest$Date)=="Fri",]$nrec)/3 > > > > but this won't work for my data because sometimes one or more of the days > > of data may be missing. For example Friday's data could be missing, or > > Friday and Saturday, or Sunday may be missing, or they all may be > missing, > > etc. > > > > The rule I want to implement is that > > if any of Friday, Saturday, or Sunday is available then I want to have an > > entry for Sunday (call it 'X'). If all 3 days are missing then nothing > > should be done and there will be no entry for X. If any of the days Fri, > > Sat, Sun are available then X should be the "average" of those values > (e.g. > > if two days are available then sum and divide by 2, if just one day is > > available then just use that value for X). > > > > Can anyone suggest how to go about this? > > Thank you. > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@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. > [[alternative HTML version deleted]] ______________________________________________ R-help@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.