Reputation: 23
Here's my dumb code which I think could have a simple way to write it in a for loop.
But I dont know how to make i
as the year (2008-2014) of the date.
Thanks for your help.
BTW: I know this may seem too simple for some skilled R users, but not for me. So please do not minus the vote. Thanks for your kindness.
data3[,2][data3$Date<"2014-09-01" & data3$Date>"2014-08-01"]<-NA
data3[,2][data3$Date<"2013-09-01" & data3$Date>"2013-08-01"]<-NA
data3[,2][data3$Date<"2012-09-01" & data3$Date>"2012-08-01"]<-NA
data3[,2][data3$Date<"2011-09-01" & data3$Date>"2011-08-01"]<-NA
data3[,2][data3$Date<"2010-09-01" & data3$Date>"2010-08-01"]<-NA
data3[,2][data3$Date<"2009-09-01" & data3$Date>"2009-08-01"]<-NA
data3[,2][data3$Date<"2008-09-01" & data3$Date>"2008-08-01"]<-NA
Upvotes: 1
Views: 359
Reputation: 886948
One way would be:
indx1 <- seq(as.Date('2008-08-01'), length.out=7, by='1 year')
indx2 <- seq(as.Date('2008-09-01'), length.out=7, by='1 year')
data3[,2] <- data3[,2]*(Reduce(`&`,Map(function(x,y) {
data3[,2][x < data3[,1] & data3[,1] < y] <- NA
data3[,2]},
indx1, indx2)))
Or
data3[unlist(Map(function(x,y,z) which(y <x & x < z) ,
list(data3[,1]), indx1, indx2)),2] <- NA
Or using a for
loop
l1 <- vector('list', length(indx1))
for(i in seq_along(indx1)){
l1[[i]] <- which(indx1[i] < data3[,1] & data3[,1] < indx2[i])
}
data3[unlist(l1),2] <- NA
set.seed(24)
data3 <- data.frame(Date=seq(as.Date('2008-07-01'), length.out=150,
by='20 days'), val=rnorm(150))
Upvotes: 1