计算两个等级为yearmon的日期之间的月数?

时间:2014-03-09 19:34:34

标签: r date

我需要从我的原始数据框创建一个新的数据框,其格式如下所示。

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.

上面的示例数据集来自我的数据。我想创建一个数据框,如下所示。

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

一般来说,该函数将计算两个日期(其类classmon)之间的月数,并将此数字指定给相应的日期。例如,如果第一行中的月数为5且第一行中的MonthFrom为1月,则该函数将5分配给1月。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

鉴于您使用的zoo类型yearmon允许使用format()进行基本数学处理和月份名称提取,以下内容适用于您(除非我遗漏了某些内容)在您的要求中):

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