【问题标题】:How to convert quarterly/monthly data to POSIXct or Date如何将季度/月度数据转换为 POSIXct 或日期
【发布时间】:2015-08-26 09:50:10
【问题描述】:

我正在尝试从欧洲央行的统计数据仓库导入数据并编写了以下函数:

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")

对于每月数据,但这会导致时间列中的NAs。

【问题讨论】:

  • 对于季度问题,您可能需要查看 zoo 包中的 as.yearqtr。就月事而言,你的方式适合我
  • 谢谢。对于月度数据,我在每个字段中得到NAs,其中数据中的英语格式与德语格式不同(例如,2010Dec 而不是 2010Dez)。这可能是问题的一部分吗?
  • 这很可能是问题所在。也许您可以将本地设置设置为德语以规避这种情况?
  • 我将 RStudio 中的设置更改为德语,但仍然无法正常工作。
  • 那么您可能需要创建一个包含对应关系的表来修改两种语言之间不匹配的内容

标签: r date posixct


【解决方案1】:

对于季度问题,你可以这样做:

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

(你可以将frac设置在0到1之间,表示你想要的周期的分数;0表示周期的开始,1表示结束)

【讨论】:

  • 只是一个小问题:是否也可以获得季度的最后日期?例如2012-12-31 这里的第一行?
猜你喜欢
  • 2019-12-06
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 2021-10-14
  • 2022-11-09
  • 2019-06-28
  • 2017-03-22
  • 2016-02-10
相关资源
最近更新 更多