簡體   English   中英

將帶有日期時間列的 dataframe 轉換為 R 中的時間序列

[英]Convert dataframe with datetime column to time series in R

我有一個 csv 文件,其中包含一個日期時間列和一個每小時消耗能量的列。

           Datetime AEP_MW
2004-12-31 01:00:00  13478
2004-12-31 02:00:00  12865
2004-12-31 03:00:00  12577
2004-12-31 04:00:00  12517
2004-12-31 05:00:00  12670
2004-12-31 06:00:00  13038
2004-12-31 07:00:00  13692
2004-12-31 08:00:00  14297
2004-12-31 09:00:00  14719
2004-12-31 10:00:00  14941
2004-12-31 11:00:00  15184
2004-12-31 12:00:00  15009
2004-12-31 13:00:00  14808
...
2018-08-03 00:00:00  14809

我想將上述每小時能耗數據轉換為時間序列格式,以便在下一步進行分解。 我試圖將日期時間從字符轉換為 POSIXlt

Datetime <- as.POSIXlt(Datetime, '%Y-%m-%d %H:%M:%S')
Warnings:
1: In strptime(xx, f, tz = tz) : unknown timezone '%Y-%m-%d %H:%M:%S'
2: In as.POSIXct.POSIXlt(x) : unknown timezone '%Y-%m-%d %H:%M:%S'
3: In strptime(x, f, tz = tz) : unknown timezone '%Y-%m-%d %H:%M:%S'

data_ts <- ts(AEP_MW, Datetime)
data_ts

Time Series:
Start = 2208913199 
End = 2209034471 
Frequency = 1 
[1] 13478 12865 12577 12517 12670 13038 13692 14297 14719 14941 15184 15009 14808 14522 14349 14107 14410
[18] 15174 15261 14774 14363 14045 13478 12892 14097 13667 13451 13379 13506 14121 15066 15771 16047 16245
...

不幸的是,這些不是我期望收到的輸出。 如何轉換數據以接收 output 作為 R 中的 nottem 數據,格式如下?

> nottem
      Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
1920 40.6 40.8 44.4 46.7 54.1 58.5 57.7 56.4 54.3 50.5 42.9 39.8
1921 44.2 39.8 45.1 47.0 54.1 58.7 66.3 59.9 57.0 54.2 39.7 42.8
1922 37.5 38.7 39.5 42.1 55.7 57.8 56.8 54.3 54.3 47.1 41.8 41.7
...

如何讓 R 知道我的數據集的頻率不是 1 並分解時間序列?

使用以下代碼

df$Datetime <- with(df, as.POSIXct(paste(Date, time), format="%Y-%m-%d %H:%M:%OS"))
data_ts <- ts(df)

如果您想擁有問題中所示的 output,您可以使用以下代碼

library(lubridate)
library(tidyverse)

df %>% 
  group_by(Date) %>% 
  summarise(daily = mean(AEP_MW)) %>% 
  mutate(Day = day(ymd(Date)),
         Month = month(ymd(Date)),
         Year = year(ymd(Date))) %>% 
  group_by(Month, Year) %>% 
  summarise(monthly = mean(daily)) %>% 
  pivot_wider(names_from = Month, values_from = monthly)

數據

df = structure(list(Date = c("2004-12-31", "2004-12-31", "2004-12-31", 
"2004-12-31", "2004-12-31", "2004-12-31", "2004-12-31", "2004-12-31", 
"2004-12-31", "2004-12-31", "2004-12-31", "2004-12-31", "2004-12-31"
), time = c("01:00:00", "02:00:00", "03:00:00", "04:00:00", "05:00:00", 
"06:00:00", "07:00:00", "08:00:00", "09:00:00", "10:00:00", "11:00:00", 
"12:00:00", "13:00:00"), AEP_MW = c(13478L, 12865L, 12577L, 12517L, 
12670L, 13038L, 13692L, 14297L, 14719L, 14941L, 15184L, 15009L, 
14808L)), class = "data.frame", row.names = c(NA, -13L))

暫無
暫無

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

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