如何将 quarterly/monthly 数据转换为 POSIXct 或 Date
How to convert quarterly/monthly data to POSIXct or Date
我正在尝试从 ECB 的统计数据仓库导入数据并编写了以下函数:
read.sdw<-function(key, startdate, enddate){
df<-read.csv(paste("http://sdw.ecb.europa.eu/quickviewexport.do?start=", startdate, "&end=", enddate, "&SERIES_KEY=", key=key, "&type=csv", sep=""), skip=4)
df
}
例如:
start.date<-"01-01-2010"
end.date<-"31-12-2012"
key<-"RDF.Q.AT.EUR.4F.CR.DCGDPG.RO"
现在的问题是我有以下形式的月度或季度数据:
Period.Unit. X.Percentage.change..
1 2000Dec 9.6
2 2000Nov 9.3
3 2000Oct 9.8
4 2000Sep 10.1
5 2000Aug 9.6
6 2000Jul 9.1
或
Period.Unit. X.Percent..
1 2012Q4 -4.23
2 2012Q3 -3.21
3 2012Q2 -4.39
4 2012Q1 -4.30
5 2011Q4 -4.40
6 2011Q3 -3.58
> dput(head(df))
structure(list(Period.Unit. = structure(c(12L, 11L, 10L, 9L,
8L, 7L), .Label = c("2010Q1", "2010Q2", "2010Q3", "2010Q4", "2011Q1",
"2011Q2", "2011Q3", "2011Q4", "2012Q1", "2012Q2", "2012Q3", "2012Q4"
), class = "factor"), X.Percent.. = c(-4.23, -3.21, -4.39, -4.3,
-4.4, -3.58)), .Names = c("Period.Unit.", "X.Percent.."), row.names = c(NA,
6L), class = "data.frame")
如何将时间列转换为 POSIXct
或 Date
才能使用它?
我已经试过了
df[,1]<-paste(df[,1], 1, sep="")
df[,1]<-as.Date(df[,1], "%Y%b%d")
用于每月数据,但这会导致时间列中出现 NA
s。
对于四分之一的问题,你可以这样做:
library(zoo)
df$date <- as.Date(as.yearqtr(df[, 1], format="%YQ%q"))
df
# Period.Unit. X.Percent.. date
#1 2012Q4 -4.23 2012-10-01
#2 2012Q3 -3.21 2012-07-01
#3 2012Q2 -4.39 2012-04-01
#4 2012Q1 -4.30 2012-01-01
#5 2011Q4 -4.40 2011-10-01
#6 2011Q3 -3.58 2011-07-01
注意:如果您想获取期间的最后一天,而不是第一天,您可以使用参数 "frac":
df$date2 <- as.Date(as.yearqtr(df[, 1], format="%YQ%q"), frac=1)
df
# Period.Unit. X.Percent.. date date2
# 1 2012Q4 -4.23 2012-10-01 2012-12-31
# 2 2012Q3 -3.21 2012-07-01 2012-09-30
# 3 2012Q2 -4.39 2012-04-01 2012-06-30
# 4 2012Q1 -4.30 2012-01-01 2012-03-31
# 5 2011Q4 -4.40 2011-10-01 2011-12-31
# 6 2011Q3 -3.58 2011-07-01 2011-09-30
(您可以在 0 和 1 之间设置 frac
以指示您想要的时间段的分数;0 表示时间段的开始,1 表示时间段的结束)
我正在尝试从 ECB 的统计数据仓库导入数据并编写了以下函数:
read.sdw<-function(key, startdate, enddate){
df<-read.csv(paste("http://sdw.ecb.europa.eu/quickviewexport.do?start=", startdate, "&end=", enddate, "&SERIES_KEY=", key=key, "&type=csv", sep=""), skip=4)
df
}
例如:
start.date<-"01-01-2010"
end.date<-"31-12-2012"
key<-"RDF.Q.AT.EUR.4F.CR.DCGDPG.RO"
现在的问题是我有以下形式的月度或季度数据:
Period.Unit. X.Percentage.change..
1 2000Dec 9.6
2 2000Nov 9.3
3 2000Oct 9.8
4 2000Sep 10.1
5 2000Aug 9.6
6 2000Jul 9.1
或
Period.Unit. X.Percent..
1 2012Q4 -4.23
2 2012Q3 -3.21
3 2012Q2 -4.39
4 2012Q1 -4.30
5 2011Q4 -4.40
6 2011Q3 -3.58
> dput(head(df))
structure(list(Period.Unit. = structure(c(12L, 11L, 10L, 9L,
8L, 7L), .Label = c("2010Q1", "2010Q2", "2010Q3", "2010Q4", "2011Q1",
"2011Q2", "2011Q3", "2011Q4", "2012Q1", "2012Q2", "2012Q3", "2012Q4"
), class = "factor"), X.Percent.. = c(-4.23, -3.21, -4.39, -4.3,
-4.4, -3.58)), .Names = c("Period.Unit.", "X.Percent.."), row.names = c(NA,
6L), class = "data.frame")
如何将时间列转换为 POSIXct
或 Date
才能使用它?
我已经试过了
df[,1]<-paste(df[,1], 1, sep="")
df[,1]<-as.Date(df[,1], "%Y%b%d")
用于每月数据,但这会导致时间列中出现 NA
s。
对于四分之一的问题,你可以这样做:
library(zoo)
df$date <- as.Date(as.yearqtr(df[, 1], format="%YQ%q"))
df
# Period.Unit. X.Percent.. date
#1 2012Q4 -4.23 2012-10-01
#2 2012Q3 -3.21 2012-07-01
#3 2012Q2 -4.39 2012-04-01
#4 2012Q1 -4.30 2012-01-01
#5 2011Q4 -4.40 2011-10-01
#6 2011Q3 -3.58 2011-07-01
注意:如果您想获取期间的最后一天,而不是第一天,您可以使用参数 "frac":
df$date2 <- as.Date(as.yearqtr(df[, 1], format="%YQ%q"), frac=1)
df
# Period.Unit. X.Percent.. date date2
# 1 2012Q4 -4.23 2012-10-01 2012-12-31
# 2 2012Q3 -3.21 2012-07-01 2012-09-30
# 3 2012Q2 -4.39 2012-04-01 2012-06-30
# 4 2012Q1 -4.30 2012-01-01 2012-03-31
# 5 2011Q4 -4.40 2011-10-01 2011-12-31
# 6 2011Q3 -3.58 2011-07-01 2011-09-30
(您可以在 0 和 1 之间设置 frac
以指示您想要的时间段的分数;0 表示时间段的开始,1 表示时间段的结束)