R xts-如何在一周中的每一天创建子集

R xts-如何在一周中的每一天创建子集,r,xts,R,Xts,我知道类似的问题已经得到了回答。我的问题是我有一个2033天的时间序列数据,间隔15分钟。我想为每一天(星期一和星期日)绘制一个系列。例如,一个普通的星期一是什么样子 我试图使用.indexwday进行子集划分,但当天的系列从13:00开始 我是一个新手,所以如果我需要提供更多的细节,请让我知道 样本数据(xts) 2008-01-01 00:00:00 16 2008-01-01 00:15:00 56 2008-01-01 00:30:00 136 2008-01-01 00:45:00

我知道类似的问题已经得到了回答。我的问题是我有一个2033天的时间序列数据,间隔15分钟。我想为每一天(星期一和星期日)绘制一个系列。例如,一个普通的星期一是什么样子

我试图使用
.indexwday
进行子集划分,但当天的系列从13:00开始

我是一个新手,所以如果我需要提供更多的细节,请让我知道

样本数据(xts)

  • 2008-01-01 00:00:00 16
  • 2008-01-01 00:15:00 56
  • 2008-01-01 00:30:00 136
  • 2008-01-01 00:45:00 170
  • 2008-01-01:00:00 132

  • 2013-07-25 22:30:00 95
  • 2013-07-25 22:45:00 82
  • 2013-07-25 23:00:00 66
  • 2013-07-25 23:15:00 65
  • 2013-07-25 23:30:00 66
  • 2013-07-25 23:45:00 46
下面的情节可能更符合我的要求(这是所有周一的平均值)

试试这个:

    #Get necessary packages
install.packages("lubridate")
install.packages("magrittr")
install.packages("dplyr")
install.packages("ggplot2")
install.packages("scales")

#Import packages
library(lubridate,warn=F)
library(dplyr,warn=F)
library(magrittr)
library(ggplot2,warn=F)
library(scales, warn=F)

#Getting the data
tstart = as.POSIXct('2008-01-01 00:00:00')
tend = as.POSIXct('2013-07-25 23:45:00')
ttimes <- seq(from = tstart,to=tend,by='15 mins')
tvals <- sample(seq(1,200),length(ttimes),T)
tsdata <- data.frame(Dates=ttimes,Vals=tvals)
tsdata <- tsdata %>% mutate(DayofWeek = wday(Dates,label=T), Hours = as.POSIXct(strftime(Dates,format="%H:%M:%S"),format="%H:%M:%S"))

#Pick a day at a time. I am using Mondays for this example.
tsdata_monday <- tsdata %>% filter(DayofWeek=='Mon') %>% group_by(Hours) %>% summarise(meanVals=mean(Vals)) %>% as.data.frame()

#Plotting the graph of mean values versus times for Monday:
ggplot(tsdata_monday) + aes(x=Hours,y=meanVals) + geom_line() + scale_x_datetime(breaks=date_breaks("4 hour"), labels=date_format("%H:%M"))

希望能有所帮助。

应用。每日的
完全符合您的需要。(假设您的数据被称为
d.xts
和xts对象)

另一种解决方案是使用
聚合

aggregate(d.xts,as.Date(index(d.xts)),sum)

请注意,答案略有不同:
适用。每日
开始(d.xts)到结束(d.xts)
,而
聚合
每天从午夜到午夜。这里有另一个解决方案,它不依赖于xts和zoo以外的包

# example data
ix <- seq(as.POSIXct("2008-01-01"), as.POSIXct("2013-07-26"), by="15 min")
set.seed(21)
x <- xts(sample(200, length(ix), TRUE), ix)

# aggregate by 15-minute observations for each weekday
a <- lapply(split.default(x, format(index(x), "%A")),         # split by weekday
  function(x) aggregate(x, format(index(x), "%H:%M"), mean))  # aggregate by 15-min
# merge aggregated data into one zoo object, ordering columns
z <- do.call(merge, a)[,c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")]
# convert index to POSIXct to make plotting easier
index(z) <- as.POSIXct(index(z), format="%H:%M")
# plot
plot(z, type="l", nc=1, ylim=range(z), main="Average daily volume", las=1)
#示例数据

ix如果您的数据对共享不敏感,您能否提供一个片段?如果恰好是,请提供一个尺寸和结构相似的。
apply.daily(d.xts,sum)
aggregate(d.xts,as.Date(index(d.xts)),sum)
# example data
ix <- seq(as.POSIXct("2008-01-01"), as.POSIXct("2013-07-26"), by="15 min")
set.seed(21)
x <- xts(sample(200, length(ix), TRUE), ix)

# aggregate by 15-minute observations for each weekday
a <- lapply(split.default(x, format(index(x), "%A")),         # split by weekday
  function(x) aggregate(x, format(index(x), "%H:%M"), mean))  # aggregate by 15-min
# merge aggregated data into one zoo object, ordering columns
z <- do.call(merge, a)[,c("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")]
# convert index to POSIXct to make plotting easier
index(z) <- as.POSIXct(index(z), format="%H:%M")
# plot
plot(z, type="l", nc=1, ylim=range(z), main="Average daily volume", las=1)