将数据转换为时间序列

时间:2019-01-23 08:36:12

标签: r dataframe dataset time-series posixct

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

dftest['newcol'] = dftest['col2'].str[:-1]
i1 = dftest.groupby('newcol')['col1'].nunique()

print('match: ', sum(i1 == 1))
#match:  2
print('MisMatch: ', sum(i1 > 1))
#MisMatch:  1

“间隔”列为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 格式。

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

谢谢

2 个答案:

答案 0 :(得分:0)

CSV代表逗号分隔的值。问题中显示的数据不是这种格式,但是如果我们假设数据是末尾的注释中可重复显示的数据帧DF,则以下代码给出了动物园系列z,并且将其转换为ts系列tt,其中时间是自1970-01-01 00:00:00以来的秒数。有关该功能的更多信息,请参见?read.zoo。 Zoo包还包含带有许多read.zoo示例的整个小插图。

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

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)

答案 1 :(得分:0)

如果您在read_csv中使用tidyverse读取csv,则会自动获得POSIXct类中的interval列。

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"