Ram
Ram

Reputation: 379

Counting number of month between two dates whose class is yearmon?

I need to create a new data frame from my original whose format given below.

MonthFrom   MonthTo
Jan 2010    May 2010
Mar 2010    Jan 2012
Jan 2011    Jun 2011
Mar 2010    Jun 2010
Feb 2012    Mar 2012
Feb 2013    Feb 2013 #please note that these two months same.

The example data set above is from my data. I want to create a data frame as below.

Month      NumberofMonth
Jan             5
Jan            12
Feb             1
Feb             2
Mar            16
Mar             4

So Generally,the function will count the number of months between two dates (whose class yearmon), and will assign this number to corresponding date. For example, If the number of months in first row is 5 and the MonthFrom in the first row is January, the function will assign the 5 to january. Can anyone help me please?

Upvotes: 1

Views: 1140

Answers (1)

hrbrmstr
hrbrmstr

Reputation: 78792

Given that the zoo type yearmon you're using allows for basic math manipulation and month name extraction with format(), the following should work for you (unless I've missed something in your requirements):

library(zoo)

my.df <- data.frame(
  MonthFrom=as.yearmon(c("Jan 2010", "Mar 2010", "Jan 2011", "Mar 2010", "Feb 2012", "Feb 2013")),              
  MonthTo=as.yearmon(c("May 2010", "Jan 2012", "Jun 2011", "Jun 2010", "Mar 2012", "Feb 2013")))

print(my.df)

##   MonthFrom  MonthTo
## 1  Jan 2010 May 2010
## 2  Mar 2010 Jan 2012
## 3  Jan 2011 Jun 2011
## 4  Mar 2010 Jun 2010
## 5  Feb 2012 Mar 2012
## 6  Feb 2013 Feb 2013

new.df <- data.frame(
  Month=format(my.df$MonthFrom, "%b"),
  NumberOfMonth= (my.df$MonthTo - my.df$MonthFrom) * 12 + 1)

print(new.df)

##   Month NumberOfMonth
## 1   Jan             5
## 2   Mar            23
## 3   Jan             6
## 4   Mar             4
## 5   Feb             2
## 6   Feb             1

Upvotes: 3

Related Questions