【问题标题】:How to represent this data as a time series in R如何在 R 中将此数据表示为时间序列
【发布时间】:2015-05-12 00:06:37
【问题描述】:

我的数据集如下所示

日期--------时间--------消费

1.1.2014----04:30-------------40

1.1.2014----05:30-------------60

1.1.2014----06:30------------50

数据跨度为 1 年,每天每 30 分钟一次。 我需要在日级别和月级别将这些数据转换为 R 中的时间序列。 如何在 R 中实现这一点。

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    您应该提供更多数据点,因为您希望汇总到每日或每月频率。

    这就是你想要的……

    library(plyr)
    library(dplyr)
    library(lubridate)
    
    my_data <-
      c("DATE--------TIME--------CONSUMPTION", "",
        "1.1.2014----04:30-------------40", 
      "", "1.1.2014----05:30-------------60", "", 
      "1.1.2014----06:30-------------50") %>% 
      str_split(., "-")
    
    my_almost_ok_df <-
      lapply(my_data[my_data != ""], 
           function(x){x[x!= ""]}) %>% 
      ldply(.)
    
    my_names <- 
      my_almost_ok_df[1, ] %>% 
      unlist(.) %>% 
      unname(.)
    
    my_ok_df <- 
      my_almost_ok_df[-1, ]
    
    names(my_ok_df) <- my_names
    
    my_result <-
      my_ok_df %>% 
      mutate(DATE = dmy(DATE),
             CONSUMPTION = as.numeric(CONSUMPTION)) %>% 
      group_by(DATE) %>% 
      summarise(CONS_mean = mean(CONSUMPTION),
                CONS_sum = sum(CONSUMPTION))
    
    my_result
    
            DATE CONS_mean CONS_sum
    1 2014-01-01        50      150
    

    要获得时间序列表示,只需选择您喜欢的列并使用 ts() 或 zoo() 或 xts() 时间序列表示。

    【讨论】:

      【解决方案2】:

      您首先需要使用aggregatedata.frame 进行一点操作,然后将其转换为ts

      x <- data.frame(date = c("1.1.2014","1.2.2014","1.1.2014"), 
                      time = c("4:30", "5:30", "6:30"), 
                      consumption =c(40,50,60))
      x$date <- as.Date(x$date, "%m.%d.%Y")
      by.day <- aggregate(x[[3]],list(x[[1]]),sum)
      ts.by.day <- ts(by.day)
      

      by month 有点棘手。我看到它的方式是转换为文本表示和aggregate(上面的继续代码)。

      x$date <- c("2.1.2014","1.2.2014","1.1.2014")
      x$date <- format(x$date, "%m.%Y")
      by.month <- aggregate(x[[3]],list(x[[1]]),sum)
      ts.by.month <- ts(by.day)
      

      【讨论】:

      • 首先感谢您回答我的问题,实际上这不是我的数据,一年内每天 24 小时收集大约 50000 个数据点。在我在网上看到的关于 R 中时间序列的所有示例中,行名是年,列名是月。这是我需要帮助的地方,我需要创建一个时间序列,其中以天为列名,以一天中的小时为行名,数据点表示消耗......请指教。
      猜你喜欢
      • 2020-06-21
      • 1970-01-01
      • 2016-04-09
      • 2017-12-13
      • 2022-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多