我的数据集如下所示
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中实现这一点。
答案 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.frame
对aggregate
进行一点操作并将其转换为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)