R 制作时间序列数据
我有一个时间序列观测数据框架,如下所示R 制作时间序列数据,r,R,我有一个时间序列观测数据框架,如下所示 Year/Month APR MAY JUN.......MAR 2012 201 203 208... 2016 2013 220 221 222......2018 2014 .................... . . . . . . 2019 230 235 237 240 我需要这样的数
Year/Month APR MAY JUN.......MAR
2012 201 203 208... 2016
2013 220 221 222......2018
2014 ....................
. .
. .
. .
2019 230 235 237 240
我需要这样的数据
Period Value
Apr-2012 .
May-2012 .
Jun-2012 .
.
.
.
.
.
Apr-2013
May-2013
Jun-2013
.
.
.
Jan-2019
Feb-2019
Mar-2019 .
一个选项是
collect
将数据收集成“long”格式,并unite
使用“key”创建“Period”的“年/月”列
library(tidyverse)
library(zoo)
gather(df1, key, val, -`Year/Month`) %>%
unite(Period, key, `Year/Month`, sep="-") %>%
mutate(Period = as.yearmon(Period, '%b-%Y')) %>%
arrange(Period)
# Period val
#1 Apr 2012 201
#2 May 2012 203
#3 Jun 2012 208
#4 Apr 2013 220
#5 May 2013 221
#6 Jun 2013 222
数据
df1您可以执行以下操作:
row.names(df) = df[,1]
with(data.frame(as.table(as.matrix(df[,-1]))),
data.frame('Year-Month' = paste(Var1,Var2,sep='-'),Value=Freq))
或者,您也可以执行以下操作:
with(cbind(year=df[,1],stack(df[,-1])),
data.frame(year=paste(year,ind,sep='-'),val=values)[order(year),])
如果包含真实数据帧的内容,则会更容易提供帮助。您可以粘贴来自dput(mydata)
的输出,其中mydata
是数据帧名称。您也可以粘贴dput(head(mydata))
来回答您的问题,只是为了有一个dataseti示例,因为它显示的字符比可以粘贴的字符长。谢谢您的建议。但它的工作方式不同。也就是说,所有的四月月份都是不同年份的月份。但我希望它是一年的所有月份,粘贴在其他年份的所有月份下面,依此类推,使用您的数据,它工作得非常好。但是我们可以通过键入来读取数据而不是提供数据吗?@Nithin.M您可以使用read.csv/read.table
etcdf1直接读取数据。它工作,但仍然输出,参考您的数据是2012年4月201年4月2013年220等。我想要的是2012年4月201年5月203年4月2013年220年5月2013221@Nithin.M六月的数据在哪里。我没有发现任何差异,除了您没有显示expectedWith First命令中显示的6月份数据,有两个问题。首先,不是年份,而是A、B、C等。其次,所有月份都在一起,而不是年份。我希望一年中的所有月份都在一起。@Nithin.M可能是因为您的第一列不是year/month
列。当我写df[,1]
时,这表示年-月列。因此,用适当的列替换它。另外,最后一个问题只是订购的问题。您只需要对数据进行排序。好的,谢谢你抽出时间
with(cbind(year=df[,1],stack(df[,-1])),
data.frame(year=paste(year,ind,sep='-'),val=values)[order(year),])