【问题标题】:transforming data into time series将数据转换为时间序列
【发布时间】:2019-06-16 19:04:11
【问题描述】:

我有一个 csv 数据集,我想将其转换为时间序列数据以进行时间序列分析。 数据看起来是这样的(还有额外的列,有 17,190 个 obs。):

temp  interval

   10.0  2014-04-01 00:00:00

   10.0  2014-04-01 00:15:00

   10.0  2014-04-01 00:30:00

   10.0  2014-04-01 00:45:00

   7.8   2014-04-01 01:00:00

间隔列采用POSIXct 格式。

我将不胜感激有关将其转换为时间序列的代码的帮助。

谢谢

【问题讨论】:

  • 你有什么尝试吗?谷歌搜索你的标题给this as a first link
  • 是的,我确实尝试了一些东西,包括尝试使用 zoo 包。另外,我尝试了您提供的链接中描述的内容,但它将“间隔”列转换为我不太理解的数字。
  • 你能分享dput(head(your_data))的输出吗?
  • 在动物园里,我认为这只是zoo(data),但您的data$interval 专栏必须排在第一位。例如。 - read.zoo(dat[c("interval","temp")], drop=FALSE) 根据stackoverflow.com/questions/14064097/…

标签: r dataframe dataset time-series posixct


【解决方案1】:

如果您在tidyverse 中使用read_csv 读取csv,您将自动获得POSIXct 类中的区间列。

dput 下方:

library(tidyverse)

df <- structure(list(temp = c(10, 10, 10, 10, 7.8), interval = structure(c(1396310400, 
1396311300, 1396312200, 1396313100, 1396314000), class = c("POSIXct", 
"POSIXt"), tzone = "UTC")), class = c("spec_tbl_df", "tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -5L), spec = structure(list(
cols = list(temp = structure(list(), class = c("collector_double", 
"collector")), interval = structure(list(format = ""), class = c("collector_datetime", 
"collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1), class = "col_spec"))

然后您可以重新排序 cols 并转换为 zoo。

library(zoo)

df <- df %>% 
  select(interval, temp) %>% 
  zoo()

class(df)
[1] "zoo"

【讨论】:

    【解决方案2】:

    CSV 代表 逗号分隔值。问题中显示的数据不是那种形式,但如果我们假设数据是一个数据框DF,在最后的注释中可重现地显示,那么下面的代码给出了一个动物园系列z,并将其转换为ts 系列 tt 其中时间是自 1970-01-01 00:00:00 以来的秒数。有关该功能的更多信息,请参阅?read.zoo。 zoo 包还包含一个完整的小插图,其中包含许多 read.zoo 示例。

    z 可用于绘图,如果您使用仅接受 ts 类输入的函数,tt 可能会很有用。

    library(zoo)
    z <- read.zoo(DF, index = "interval", tz = "")
    tt <- as.ts(z)
    

    注意

    Lines <- "
    temp  interval
       10.0  2014-04-01 00:00:00
       10.0  2014-04-01 00:15:00
       10.0  2014-04-01 00:30:00
       10.0  2014-04-01 00:45:00
       7.8   2014-04-01 01:00:00"
    
    # read into separate lines, trim whitespace from ends and
    #  replace 2 or more consecutive spaces with comma
    L <- gsub("  +", ",", trimws(readLines(textConnection(Lines))))
    DF <- read.csv(text = L)
    

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 1970-01-01
      • 2023-01-25
      • 2021-09-23
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多