Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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
如何计算r中数据帧的日期列中的天数、周数和月数?_R_Date_Datetime - Fatal编程技术网

如何计算r中数据帧的日期列中的天数、周数和月数?

如何计算r中数据帧的日期列中的天数、周数和月数?,r,date,datetime,R,Date,Datetime,使用format()我可以按如下方式提取年、月和日: date day month year <date> <fctr> <fctr> <fctr> 2005-01-01 01 01 2005 2005-01-01 01 01 2005 2005-01-02 02 01 2005

使用
format()
我可以按如下方式提取年、月和日:

date        day       month     year
<date>      <fctr>    <fctr>    <fctr>
    
2005-01-01  01        01        2005    
2005-01-01  01        01        2005    
2005-01-02  02        01        2005    
2005-01-02  02        01        2005    
2005-01-03  03        01        2005    
2005-01-03  03        01        2005    
...

2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010
2010-12-31  31        12        2010
date        day       month     year     day_num    week_num    month_num
<date>      <fctr>    <fctr>    <fctr>   <double>   <double>    <double>
    
2005-01-01  01        01        2005     1          1           1
2005-01-01  01        01        2005     1          1           1
2005-01-02  02        01        2005     2          1           1
2005-01-02  02        01        2005     2          1           1
2005-01-03  03        01        2005     3          1           1
2005-01-03  03        01        2005     3          1           1
...

2005-02-28  28        02        2005     59         9           2
2005-03-01  01        03        2005     60         9           3
2005-03-02  02        03        2005     61         9           3
...
日期-日-月-年
2005-01-01  01        01        2005    
2005-01-01  01        01        2005    
2005-01-02  02        01        2005    
2005-01-02  02        01        2005    
2005-01-03  03        01        2005    
2005-01-03  03        01        2005    
...
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010
2010-12-31  31        12        2010
然而,我也想计算一下从开始到结束有多少天、几周、几个月。也就是说,我想创建日、周、月的数字,如下所示:

date        day       month     year
<date>      <fctr>    <fctr>    <fctr>
    
2005-01-01  01        01        2005    
2005-01-01  01        01        2005    
2005-01-02  02        01        2005    
2005-01-02  02        01        2005    
2005-01-03  03        01        2005    
2005-01-03  03        01        2005    
...

2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010    
2010-12-31  31        12        2010
2010-12-31  31        12        2010
date        day       month     year     day_num    week_num    month_num
<date>      <fctr>    <fctr>    <fctr>   <double>   <double>    <double>
    
2005-01-01  01        01        2005     1          1           1
2005-01-01  01        01        2005     1          1           1
2005-01-02  02        01        2005     2          1           1
2005-01-02  02        01        2005     2          1           1
2005-01-03  03        01        2005     3          1           1
2005-01-03  03        01        2005     3          1           1
...

2005-02-28  28        02        2005     59         9           2
2005-03-01  01        03        2005     60         9           3
2005-03-02  02        03        2005     61         9           3
...
date day month year day\u num week\u num month\u num
2005-01-01  01        01        2005     1          1           1
2005-01-01  01        01        2005     1          1           1
2005-01-02  02        01        2005     2          1           1
2005-01-02  02        01        2005     2          1           1
2005-01-03  03        01        2005     3          1           1
2005-01-03  03        01        2005     3          1           1
...
2005-02-28  28        02        2005     59         9           2
2005-03-01  01        03        2005     60         9           3
2005-03-02  02        03        2005     61         9           3
...

如何才能在不计算错误的情况下做到这一点?

您可以使用
difftime
获取天数和周数,但您需要解决月数问题。这将实现以下目的:

库(lubridate)
图书馆(dplyr)
df%>%
变异(
day_num=数值形式(difftime(日期,min(日期),units=“天”),
week_num=楼层(数字形式(difftime(日期,min(日期),units=“weeks”)),
tmp=年(日期)*12+月(日期),
月数=tmp-分钟(tmp)
) %>% 
选择(-tmp)
格式()
与以下代码一起使用:

date = strptime('2005-02-28', format='%Y-%m-%d')

format(date, '%j') # Decimal day of the year

format(date, '%U') # Decimal week of the year (starting on Sunday)

format(date, '%W') # Decimal week of the year (starting on Monday)

format(date, '%m') # Decimal month
输出:

[1] "059"
[1] "09"
[1] "09"
[1] "02"

不是月数,只是
作为.numeric(作为.character(month))
或者
格式(日期,'%W')
表示周数,而
匹配(日期,唯一(日期))
表示日数。在月份栏中,“01”表示“一月”,同样,“02”表示“二月”,依此类推。但是按月数,我想看看从开始到结束,我的数据中有多少个月,并将这些信息作为一个单独的列添加好,可能是您的示例不清楚,因为“月”和“月数”显示相同的输出,但typeday和week则更清楚。计算所有这三个变量背后的想法实际上是相同的,这更容易!是的,它每年单独计算一次,但它不应该从一年开始计算,然后继续到下一年。我的意思是这样的<2005-01-01的代码>;天:1,周:0,月:1。2005-12-31年度;日期:365,周:52,月:12,但对于2006-01-01;第1天,第0周,第1个月,但我希望它继续,即2006-01-01的
;2006年12月31日,第366天,第53周,第13个月;日:730,周:104,月:24
。是的,它每年单独计算一次,但它不应该从一年开始,然后继续到下一年。我的意思是这样的。2005-01-01年度;天:1,周:0,月:1。2005-12-31年度;日期:365,周:52,月:12,但适用于2006-01-01;第1天,第0周,第1个月,但我希望它继续,即2006-01-01;日期:366,周:53,月:13,2006-12-31类似;日:730周:104月:24