Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算班级为yearmon的两个日期之间的月数?_R_Date - Fatal编程技术网

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

计算班级为yearmon的两个日期之间的月数?,r,date,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

我需要从下面给出的原始格式创建一个新的数据帧

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

因此,通常情况下,该函数将计算两个日期(其类yearmon)之间的月数,并将该数字分配给相应的日期。例如,如果第一行中的月数为5,而第一行中的月数为1月,则函数会将5分配给1月。有人能帮我吗?

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

图书馆(动物园)
我的.df
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