首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将csv文件转换为时间序列格式

将csv文件转换为时间序列格式
EN

Stack Overflow用户
提问于 2019-04-07 18:50:10
回答 2查看 349关注 0票数 0

当文件导入R studio时,我正在尝试将csv文件转换为时间序列格式。csv数据的格式如下:

代码语言:javascript
运行
复制
      week1 week2 week3 week4 ...
2011    6     6     9     11
2012    11    16    18    14
2013    12    8     11    10
2014    17    16    10    7
2015    13    13    13    14
2016    9     13    16    16
2017    11    24    20    19
2018    5     14    18    13

并持续了21周。

我尝试使用以下代码将数据转换为时间序列格式:

代码语言:javascript
运行
复制
library(zoo)
con <- read.csv(file = "TS_11.csv", header = T, sep = ",")
series <- as.ts(read.zoo(con, FUN = as.yearmon))

上面代码的结果成功地将数据转换为时间序列数据,但不是我想要的格式。

代码语言:javascript
运行
复制
series: Time-Series [1:8, 1:21] from 2011 to 2018: 6 11 12 1..

我希望数据在转换为时间序列时采用以下格式:

代码语言:javascript
运行
复制
series: Time-Series [1:168] from 2011 to 2018: 6 11 12 1..

其中1:168包含csv文件中包含的所有数据。这与AirPassengers时间序列数据在R studio中的格式相同。我希望将我的数据转换为与AirPassengers相同的时间序列格式。

EN

回答 2

Stack Overflow用户

发布于 2019-04-07 21:28:56

如果con如问题所示,则使用适当的起始值和频率值对其进行转置和分解。有关自包含的可重现版本,请参阅注释。

代码语言:javascript
运行
复制
ts(c(t(con)), start = start(con), frequency = ncol(con))

备注

代码语言:javascript
运行
复制
Lines <- "year week1 week2 week3 week4
2011    6     6     9     11
2012    11    16    18    14
2013    12    8     11    10
2014    17    16    10    7
2015    13    13    13    14
2016    9     13    16    16
2017    11    24    20    19
2018    5     14    18    13"
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, FUN = c)
ts(c(t(z)), start = start(z), frequency = ncol(z))
票数 1
EN

Stack Overflow用户

发布于 2019-04-07 19:07:47

下面是一个非zoo选项:

代码语言:javascript
运行
复制
yday <- seq(0,21)*7+1 # julian day
year <- 2011:2018 # year
g <- expand.grid(year=year, yday=yday)
g$date <- strptime(paste(g$year, g$yday, sep="-"), format = "%Y-%j", tz = "GMT")
G <- matrix(as.character(g$date), nrow = length(year), ncol = length(yday))
G <- as.data.frame(G)
L <- as.data.frame(lapply(G, as.Date))
colnames(L) <- paste0("week", seq(ncol(L)))

结果:

代码语言:javascript
运行
复制
> L[,1:4]
       week1      week2      week3      week4
1 2011-01-01 2011-01-08 2011-01-15 2011-01-22
2 2012-01-01 2012-01-08 2012-01-15 2012-01-22
3 2013-01-01 2013-01-08 2013-01-15 2013-01-22
4 2014-01-01 2014-01-08 2014-01-15 2014-01-22
5 2015-01-01 2015-01-08 2015-01-15 2015-01-22
6 2016-01-01 2016-01-08 2016-01-15 2016-01-22
7 2017-01-01 2017-01-08 2017-01-15 2017-01-22
8 2018-01-01 2018-01-08 2018-01-15 2018-01-22
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55558152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档