如何计算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