1

我正在尝试获取每个特定周的数量,即第一周为 1,第二周为 2,依此类推。

我的数据从 2012 年 1 月 1 日开始,并假设所有日期/时间都与芝加哥/CST6CDT 时区相关。马上,我似乎遇到了问题(无论是我的理解还是编程),让一周功能给我我需要的东西。

例如...

x=seq(as.POSIXlt("2012-1-1"), as.POSIXlt("2012-1-10"), by="day")
cbind(as.character(x), week(x))

...给我...

      [,1]         [,2]
 [1,] "2012-01-01" "1" 
 [2,] "2012-01-02" "1" 
 [3,] "2012-01-03" "1" 
 [4,] "2012-01-04" "1" 
 [5,] "2012-01-05" "1" 
 [6,] "2012-01-06" "1" 
 [7,] "2012-01-07" "2" 
 [8,] "2012-01-08" "2" 
 [9,] "2012-01-09" "2" 
[10,] "2012-01-10" "2" 

2012 年 1 月 7 日,星期六,应该被视为第一周的一部分,对吧?设置时区似乎没有帮助。

x=seq(as.POSIXlt("2012-1-1", tz="CST6CDT"), as.POSIXlt("2012-1-10", tz="CST6CDT"), by="day")

有没有解决的办法?

4

2 回答 2

3

你想要的可能是isoweek(),不是week()。我的日历周总是有同样的问题:)

于 2015-05-29T13:14:12.527 回答
1

这与函数week在包中的编写方式有关:

 > week()
 function (x) 
 yday(x)%/%7 + 1

在您的情况下,对于 2012 年 1 月 7 日:

 x = as.POSIXlt("2012-1-7")
 yday(x) = 1

然后:

 week(x) = (1%/%7) + 1 = 2

为了让它按你的意愿工作,试试这个

 x=seq(as.POSIXlt("2012-1-1", tz = "UCT"), as.POSIXlt("2012-1-20", tz = "UTC"), by="day")
 cbind(as.character(x), (yday(x)-1)%/%7+1)

您会得到以下输出:

#      [,1]         [,2]
# [1,] "2012-01-01" "1" 
# [2,] "2012-01-02" "1" 
# [3,] "2012-01-03" "1" 
# [4,] "2012-01-04" "1" 
# [5,] "2012-01-05" "1" 
# [6,] "2012-01-06" "1" 
# [7,] "2012-01-07" "1"   <<<
# [8,] "2012-01-08" "2" 
# [9,] "2012-01-09" "2" 
#[10,] "2012-01-10" "2" 
#[11,] "2012-01-11" "2" 
#[12,] "2012-01-12" "2" 
#[13,] "2012-01-13" "2" 
#[14,] "2012-01-14" "2" 
#[15,] "2012-01-15" "3" 
#[16,] "2012-01-16" "3" 
#[17,] "2012-01-17" "3" 
#[18,] "2012-01-18" "3" 
#[19,] "2012-01-19" "3" 
#[20,] "2012-01-20" "3" 
于 2013-08-21T20:59:26.750 回答