我举个例子要清楚:
如果我们谈到 2006/2007 年,2006 年的最后一天是星期日,而 2007 年的第一天是星期一。根据意大利(以及其他国家)的说法,它们属于不同的周。
如何在 R 中获取这些信息?
如果我做:
difftime(as.Date("2007-01-01"),as.Date("2006-12-31"),units="weeks")
我得到:0.1428571 ...但我想知道一些获得 1 的方法(因为它们相差 1 周)
我举个例子要清楚:
如果我们谈到 2006/2007 年,2006 年的最后一天是星期日,而 2007 年的第一天是星期一。根据意大利(以及其他国家)的说法,它们属于不同的周。
如何在 R 中获取这些信息?
如果我做:
difftime(as.Date("2007-01-01"),as.Date("2006-12-31"),units="weeks")
我得到:0.1428571 ...但我想知道一些获得 1 的方法(因为它们相差 1 周)
你的问题是星期一应该是一周的第一天。R 包通常将星期日视为一周的第一天。
我的解决方案使用该lubridate
软件包并将一周中的一天减少了一天。随着这个星期一变成星期日,一周的第一天lubridate
。然后我floor_date
用来获取一周的第一天和difftime
结果。
library(lubridate)
dates <-c(as.Date("2007-01-01"),as.Date("2006-12-31"))
weekdays(dates)
#[1] "Monday" "Sunday"
tempdates <-update(dates,wdays=wday(dates)-1)
weekdays(tempdates)
#[1] "Sunday" "Saturday"
floor1 <-floor_date(tempdates, "week")
difftime(floor1[1],floor1[2], units = "weeks")
#Time difference of 1 weeks
1 月 1 日和 2 日在同一周结束,使用此解决方案
dates <-c(as.Date("2007-01-02"),as.Date("2007-01-01"))
tempdates <-update(dates,wdays=wday(dates)-1)
floor1 <-floor_date(tempdates, "week")
difftime(floor1[1],floor1[2], units = "weeks")
#Time difference of 0 weeks
您可以从 开始strftime(as.Date("2007-01-01"),"%U")
,它标识一年中的周数(查找strftime
),并可能添加一年中最后一周的特殊情况。
“周”的差异取决于您是使用“周”作为 7 天还是作为序列号。这为您提供了一种使用“周”的第二个定义的 R 方法:
diff( c(as.numeric(format( as.Date("2007-01-01"), "%W")),
as.numeric(format(as.Date("2006-12-31"), "%W")) ))
[1] 51