R 润滑周()给了我';错误';周,可能的问题?

R 润滑周()给了我';错误';周,可能的问题?,r,lubridate,R,Lubridate,我试图得到每一周的数字,即第一周1,第二周2,等等 我的数据始于2012年1月1日,假设所有日期/时间都与芝加哥/CST6CDT时区相关。一开始,我似乎在获取week函数以满足我的需求方面遇到了问题(无论是理解还是编程) 例如 x=seq(as.POSIXlt("2012-1-1"), as.POSIXlt("2012-1-10"), by="day") cbind(as.character(x), week(x)) …给了我 [,1] [,2] [1,] "20

我试图得到每一周的数字,即第一周1,第二周2,等等

我的数据始于2012年1月1日,假设所有日期/时间都与芝加哥/CST6CDT时区相关。一开始,我似乎在获取week函数以满足我的需求方面遇到了问题(无论是理解还是编程)

例如

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")

有办法解决这个问题吗?

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

 > week()
 function (x) 
 yday(x)%/%7 + 1
就您而言,2012年1月7日:

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

要使其按您的意愿工作,请尝试以下操作:

 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" 
#[,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”这与功能
在软件包中的写入方式有关:

 > week()
 function (x) 
 yday(x)%/%7 + 1
就您而言,2012年1月7日:

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

要使其按您的意愿工作,请尝试以下操作:

 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" 
#[,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”您想要的可能是
isoweek()
,而不是
week()
。我的日历周总是有同样的问题:)

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

是否有可能使用ISO周?这些都有一些违反直觉的规则。它与函数
week
本身有关。请参考我的答案。谢谢。有没有可能使用ISO周?这些都有一些违反直觉的规则。它与函数
week
本身有关。请参考我的答案。谢谢