簡體   English   中英

使用 R 將時間序列數據划分為工作日和周末數據集

[英]Divide time-series data into weekday and weekend datasets using R

我有由兩列(時間戳和功率)組成的數據集,如下所示:

 str(df2)
'data.frame':   720 obs. of  2 variables:
 $ timestamp: POSIXct, format: "2015-08-01 00:00:00" "2015-08-01 01:00:00" " ...
 $ power    : num  124 149 118 167 130 ..

該數據集的持續時間為整整一個月。 我想創建它的兩個子集 - 一個包含周末數據,另一個包含工作日(星期一 - 星期五)數據。 換句話說,一個數據集應該包含對應於周六和周日的數據,而另一個數據集應該包含其他日期的數據。 兩個子集都應保留兩列。 我怎樣才能在 R 中做到這一點?

我嘗試使用聚合和拆分的概念,但我不清楚聚合的函數參數(FUN)中,我應該如何指定數據集的划分。

可以使用R基本函數來做到這一點,首先使用strptime從第一塔分開的日期數據,然后使用函數weekdays 例子:

df1<-data.frame(timestamp=c("2015-08-01 00:00:00","2015-10-13 00:00:00"),power=1:2)
df1$day<-strptime(df1[,1], "%Y-%m-%d")
df1$weekday<-weekdays(df1$day)
df1
 timestamp              power   day      weekday
 2015-08-01 00:00:00     1   2015-08-01  Saturday
 2015-10-13 00:00:00     2   2015-10-13  Tuesday

最初,我嘗試使用額外的庫來實現復雜的方法,但最后,我提出了使用 R 的基本方法。

    #adding day column to existing set 
    df2$day <- weekdays(as.POSIXct(df2$timestamp))    
    # creating two data_subsets, i.e., week_data and weekend_data
    week_data<- data.frame(timestamp=factor(), power= numeric(),day= character())
    weekend_data<- data.frame(timestamp=factor(),power=numeric(),day= character())
    #Specifying weekend days in vector, weekend
    weekend <- c("Saturday","Sunday")
    for(i in 1:nrow(df2)){
      if(is.element(df2[i,3], weekend)){
        weekend_data <- rbind(weekend_data, df2[i,])
      } else{
        week_data <- rbind(week_data, df2[i,])
      }
    }

創建的數據集,即weekend_data 和week_data 是我需要的子數據集。

建立在@ShruS 示例之上:

df<-data.frame(timestamp=c("2015-08-01 00:00:00","2015-10-13 00:00:00", "2015-10-11 00:00:00", "2015-10-14 00:00:00"))
df$day<-strptime(df[,1], "%Y-%m-%d")
df$weekday<-weekdays(df$day)
df1 = subset(df,df$weekday == "Saturday" | df$weekday == "Sunday")
df2 = subset(df,df$weekday != "Saturday" & df$weekday != "Sunday")

> df
            timestamp        day   weekday
1 2015-08-01 00:00:00 2015-08-01  Saturday
2 2015-10-13 00:00:00 2015-10-13   Tuesday
3 2015-10-11 00:00:00 2015-10-11    Sunday
4 2015-10-14 00:00:00 2015-10-14 Wednesday

> df1
            timestamp        day  weekday
1 2015-08-01 00:00:00 2015-08-01 Saturday
3 2015-10-11 00:00:00 2015-10-11   Sunday

> df2
            timestamp        day   weekday
2 2015-10-13 00:00:00 2015-10-13   Tuesday
4 2015-10-14 00:00:00 2015-10-14 Wednesday

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM