我有一个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
格式。
请提供有关将其转换为时间序列的代码的帮助,我们将不胜感激。
谢谢
答案 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"