繁体   English   中英

将数据帧转换为时间序列 R

[英]Convert data frame to time series R

我有以下数据

data_sample
        date         Sum 
1  Feb 2015      3322.01 
2  Mar 2015      6652.77 
3  Apr 2015      3311.12 
etc

我需要转换为时间序列进行预测

 > data <- xts(data_sample[,-1], order.by=as.Date(data_sample[,1], "%Y %m"))
Error in 1 - frac : non-numeric argument to binary operator
> data <- xts(data_sample[,-1], order.by=as.Date(data_sample[,1], "%m %Y"))
Error in 1 - frac : non-numeric argument to binary operator



> ts_ts(ts_long(data_sample))
Error in guess_time(x) : 
  No [time] column detected. To be explict, name time column as 'time'.

如果要使用 as.Date(),则必须指定完整日期。 只需在每个条目的末尾添加 01。

date <- c("Feb 2015", "Mar 2015", "Apr 2015")
date <- as.Date(paste(date, "01"), format="%b %Y %d")

您可以按如下方式将它们转换回来,

format(date, "%b %Y")

或使用动物园图书馆中的 as.yearmon,

library("zoo")
as.yearmon(date)

这里的一些例子: Converting Date format in R

R 有多种表示时间序列的方式。 由于您只使用 Date 和 Sum,因此我为您创建了一个示例时间序列。 我选择随机日期和数字。

索取包裹

library(xts)

创建数据框

data_sample <- data.frame(
        date = as.Date(c("2012-01-01","2013-01-01","2014-01-01", )),  
        sum1 = c(3322.01, 6652.77, 3311.12))
head(data_sample)

将日期转换为 R 理解的格式。

rdate<- as.Date(data_sample$date, "%m/%d/%y")  
fix(rdate)

绘制图形

plot(data_sample$sum1~rdate,type="l",col="red")

执行上述代码将给出以下输出。

在此处输入图片说明

假设data_sample在最后的注释中可重复显示,使用read.zoo转换为类 zoo 的时间序列,然后以该形式使用它或使用适当的 as 将其转换为其他类,例如 xts 或 ts。 * 功能。 这里我们使用yearmon类来表示索引,因为它直接表示年和月,没有日。 这个类将用于 zoo 和 xts,当转换为 ts 时,它将被适当地转换。

library(xts) # this also loads zoo

z <- read.zoo(data_sample, FUN = as.yearmon, format = "%b %Y")

as.xts(z)
as.ts(z)

日期

也可以将 Date 类用于 zoo 和 xts 中的索引,但这不适用于 ts 类。 使用 Date 类意味着连续点之间的距离根据每月的天数而变化,而不是定期间隔的系列,因此对每月数据使用 Date 通常对预测没有用。

zd <- aggregate(z, as.Date, c)
xd <- as.xts(zd)

笔记

以可复制形式输入

Lines <- "date,Sum 
1,Feb 2015,3322.01 
2,Mar 2015,6652.77 
3,Apr 2015,3311.12 "
data_sample <- read.csv(text = Lines)
air1 <- type.convert(.preformat.ts(AirPassengers))
airpassengers <- as.data.frame(air1)
 
 View(airpassengers)
 class(airpassengers)
[1] "data.frame"

它将时间序列数据转换为数据帧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM