Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R: Window Function "Start" after "End"

Tags:

r

I am having a problem with the window function in R.

newdata1 <-window(mergedall,start=c(as.Date(as.character("2014-06-16"))),end=c(as.Date(as.character("2015-01-31"))))

I got this error. I am trying to understand how I can fix this issue. Thank you!

Error in window.default(mergedall, start = c(as.Date(as.character("2014-06-16"))),  : 
  'start' cannot be after 'end'
In addition: Warning message:
In window.default(mergedall, start = c(as.Date(as.character("2014-06-16"))),  :
  'end' value not changed`
like image 986
Ngoc Diep Avatar asked Apr 16 '15 03:04

Ngoc Diep


2 Answers

I know it's an old post. But, please make sure that "mergedall" is a time series object which was created using the ts command.

While creating the time series object from any vector or series,

some_result_ts <- ts(vector,frequency=xx,start=c(yyyy,m))

This kind of error comes when yyyy is lesser than the start you are specifying in window command.

For example if you take a data frame column or a vector or series , and during the ts formation with ts command, give yyyy=2010,m=1 with a frequency of 12 and assuming it's a 36 month data, the implicit end will be 2013,12.

some_result_ts <- ts(vector,frequency=12,start=c(2010,1))

Then, while using a window function, if you are specifying let's say, start = c(2014,1) , then R will give a message that => 'start' cannot be after 'end' and end value not changed.

like image 130
tmbsundar Avatar answered Oct 18 '22 06:10

tmbsundar


Again it's an old post. But since I stumbled upon it by searching the same error. I want to still provide something useful for future Googlers.

I could not replicate your issue because you did not provide your own mergedall dataset. So I am starting with a toy example to show a few places where the problem might be. It's really not that difficult at all.

Potential problem #1:

You did not create a ts object to begin with. Window function operates on a ts object, and it cannot just be a vector took directly from a df. Use ts function to make a vector a ts object first. And then assign it with proper start, end, frequency.

all <-seq(1:8) #eight observations in sequence

Assign these eight values as monthly observations, starting from 201406 to 201501. Frequency 12 means monthly.

all.ts <- ts(all, start = c(2014,6), end = c(2015,1), frequency = 12)

Potential problem #2:

You perhaps already assigned your mergedall series as a ts object, but with different start/end/frequency. My example above was based on monthly observations. So even though they are correct examples, they will not match with your daily-based window function. Window function and the ts object needs to be consistent.

Following my example, the window function would look like:

newdata1 <-window(all.ts,start=c(2014,6),end=c(2015,1) )
like image 2
RachelSunny Avatar answered Oct 18 '22 07:10

RachelSunny