如何将此数据表示为R中的时间序列

时间:2015-03-10 12:22:44

标签: r time-series

我的数据集如下所示

DATE -------- TIME -------- CONSUMPTION

2014年1月1日04:30 ---- 40 -------------

2014年1月1日05:30 ---- 60 -------------

2014年1月1日06:30 ---- 50 -------------

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

2 个答案:

答案 0 :(得分:0)

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

这就是你所追求的......

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()时间序列表示。

答案 1 :(得分:0)

您首先需要使用data.frameaggregate进行一点操作并将其转换为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)