2

我举个例子要清楚:

如果我们谈到 2006/2007 年,2006 年的最后一天是星期日,而 2007 年的第一天是星期一。根据意大利(以及其他国家)的说法,它们属于不同的周。

如何在 R 中获取这些信息?

如果我做:

difftime(as.Date("2007-01-01"),as.Date("2006-12-31"),units="weeks")

我得到:0.1428571 ...但我想知道一些获得 1 的方法(因为它们相差 1 周)

4

3 回答 3

3

你的问题是星期一应该是一周的第一天。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
于 2013-11-28T16:26:20.243 回答
0

您可以从 开始strftime(as.Date("2007-01-01"),"%U"),它标识一年中的周数(查找strftime),并可能添加一年中最后一周的特殊情况。

于 2013-11-28T14:53:58.610 回答
0

“周”的差异取决于您是使用“周”作为 7 天还是作为序列号。这为您提供了一种使用“周”的第二个定义的 R 方法:

 diff( c(as.numeric(format( as.Date("2007-01-01"), "%W")), 
        as.numeric(format(as.Date("2006-12-31"), "%W")) ))
 [1] 51
于 2013-11-28T16:47:15.477 回答