Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在时间序列中分配周数以获得周平均价格_R_Date_Time Series - Fatal编程技术网

R 在时间序列中分配周数以获得周平均价格

R 在时间序列中分配周数以获得周平均价格,r,date,time-series,R,Date,Time Series,假设我有一个包含每日数据(工作日)的时间序列,我希望按工作周组织数据。(星期一至星期五)与《原油期货价格环境影响评估》网页中的方式类似: 正如你所看到的,在这个网页上,价格是按周排列的。 R中是否有任何函数可以以类似的方式组织数据 您可以在以下位置获取.xls格式的数据: 我想做的是为每天的观察分配一个周数,如下所示:(查看周列) 到目前为止,我已经使用了lubridate包的week功能,但效果不好。似乎一年中有一次达到第53周,该函数就无法在下一年的一周正确启动 我一直在尝试远离rep、

假设我有一个包含每日数据(工作日)的时间序列,我希望按工作周组织数据。(星期一至星期五)与《原油期货价格环境影响评估》网页中的方式类似:

正如你所看到的,在这个网页上,价格是按周排列的。 R中是否有任何函数可以以类似的方式组织数据

您可以在以下位置获取.xls格式的数据:

我想做的是为每天的观察分配一个周数,如下所示:(查看周列)

到目前为止,我已经使用了lubridate包的week功能,但效果不好。似乎一年中有一次达到第53周,该函数就无法在下一年的一周正确启动

我一直在尝试远离rep、seq/5或/7类解决方案,因为我可能需要在以后从数据中过滤一些观察结果,所以我希望有一个解决方案,它不依赖于我的数据的特定向量,而是我更希望解决方案更一般,也就是依赖于date类,即POSIcxt、xts或动物园级

如果有任何提示,我们将不胜感激。

这行得通吗

as.POSIXlt()$yday %/% 7
我意识到它确实有你想要避免的部分内容,但它确实从一个公认的类中引出了它的起点。请注意,我是用
colClasses=c(“日期”、“数字”、“数字”、“字符”)读入您的数据的。

如果要复制这些间隔标签,请尝试将7的倍数添加到任何周一和周五:

 paste(as.Date(strptime("1983 Apr- 4",format="%Y %b- %d"))+(39)*7, 
         " to ", 
         as.Date(strptime("1983 Apr- 8",format="%Y %b- %d"))+(39)*7,
         sep="")
@[1] "1984-01-02 to 1984-01-06" #  The first new year change
 paste(as.Date(strptime("1983 Apr- 4",format="%Y %b- %d"))+(39+52)*7, 
         " to ", 
         as.Date(strptime("1983 Apr- 8",format="%Y %b- %d"))+(39+52)*7,
         sep="")
#[1] "1984-12-31 to 1985-01-04"  #  The second new year change
下面是一个接受整数向量的函数:

from8Apr83dts <- function(numwks) { 
     paste(as.Date(strptime("1983 Apr- 4",format="%Y %b- %d"))+(numwks)*7, 
          " to ", 
          as.Date(strptime("1983 Apr- 8",format="%Y %b- %d"))+(numwks)*7,
          sep="") 
                                   }
# Usage
from8Apr83dts(39:40)
#[1] "1984-01-02 to 1984-01-06" "1984-01-09 to 1984-01-13"

从8APR83DTS链接的示例数据来看,@AndresT似乎希望这些是工作周,因此周一到周五总是在同一周。一种可能是使用strftime(如.POSIXlt(dat$Date),format=“%W”)
,但这并不总是将一周中跨越两年的几天联系起来(例如12月31日星期一和1月4日星期五)。也许@AndresT可以澄清他想在这几周里做什么……你说你想让它看起来像你提供的例子一样。我就是这么做的。每周间隔与您链接到的网站中的间隔相匹配。如果你想要一些不同的东西,那么提供清晰的说明。不管怎样,我得到了工作日(如.Date(“1984-01-02”))[1]“周一”我看到了你下面的评论,但你仍然没有说你想要的是一年中增量的周数;你只需要一周的时间如果你想给两年后的几周分配一个数字,那么你需要告诉我们分配什么数字。
 paste(as.Date(strptime("1983 Apr- 4",format="%Y %b- %d"))+(39)*7, 
         " to ", 
         as.Date(strptime("1983 Apr- 8",format="%Y %b- %d"))+(39)*7,
         sep="")
@[1] "1984-01-02 to 1984-01-06" #  The first new year change
 paste(as.Date(strptime("1983 Apr- 4",format="%Y %b- %d"))+(39+52)*7, 
         " to ", 
         as.Date(strptime("1983 Apr- 8",format="%Y %b- %d"))+(39+52)*7,
         sep="")
#[1] "1984-12-31 to 1985-01-04"  #  The second new year change
from8Apr83dts <- function(numwks) { 
     paste(as.Date(strptime("1983 Apr- 4",format="%Y %b- %d"))+(numwks)*7, 
          " to ", 
          as.Date(strptime("1983 Apr- 8",format="%Y %b- %d"))+(numwks)*7,
          sep="") 
                                   }
# Usage
from8Apr83dts(39:40)
#[1] "1984-01-02 to 1984-01-06" "1984-01-09 to 1984-01-13"