0

我从 OECD 网站下载了一些 .xls 格式的 GDP 数据。但是,为了使这些数据在 R 中可用,我需要将数据重新格式化为 .csv 文件。更具体地说,我需要第一列中的年、日和月,在逗号之后我需要 GDP 值(例如:1990-01-01、234590)。

具有 GDP 值的列可以轻松复制和转置,但如何快速添加日期?有没有一种快速的方法可以做到这一点,而无需手动添加日期?

示例输出

谢谢您的帮助!

最好的,肖恩

PS。链接到特定 OECD 文件(其中之一):https ://ufile.io/8ogav或https://stats.oecd.org/index.aspx?queryid=350#

PSS。我现在已将文件更改为:

示例 2

我想将其转换为与示例 1 相同的样式。我用于读取数据的代码:

gdp.start <- c(1970,1) # type "double"
gdp.end   <- c(2018,1)

gdp.raw <- "rawData/germany_gdp.csv"
gdp.table <- read.table(gdp.raw, skip = 1, header = F, sep = ',', stringsAsFactors = F)
gdp.ger <- ts(gdp.table[,2], start = gdp.start, frequency = 4) # time-series representation

PSS。

dput(head(gdp.table))
structure(list(V1 = c("Q2-1970;1.438.810 ", "Q3-1970;1.465.684 ", 
"Q4-1970;1.478.108 ", "Q1-1971;1.449.712 ", "Q2-1971;1.480.136 ", 
"Q3-1971;1.505.743 ")), row.names = c(NA, 6L), class = "data.frame")
4

1 回答 1

0

使用您的数据:

z <- structure(list(V1 = c("Q2-1970;1.438.810 ", "Q3-1970;1.465.684 ", 
"Q4-1970;1.478.108 ", "Q1-1971;1.449.712 ", "Q2-1971;1.480.136 ", 
"Q3-1971;1.505.743 ")), row.names = c(NA, 6L), class = "data.frame")
dat <- read.csv2(text=paste(z$V1, collapse='\n'), stringsAsFactors=FALSE, header=FALSE)
dat
#        V1         V2
# 1 Q2-1970 1.438.810 
# 2 Q3-1970 1.465.684 
# 3 Q4-1970 1.478.108 
# 4 Q1-1971 1.449.712 
# 5 Q2-1971 1.480.136 
# 6 Q3-1971 1.505.743 

和一个简单的功能,用每个季度的第一个日期替换季度

quarters <- function(s, format) {
  qs <- c("Q1","Q2","Q3","Q4")
  dts <- c("01-01", "04-01", "07-01", "10-01")
  for (i in seq_along(qs))
    s <- sub(qs[i], dts[i], s)
  if (! missing(format))
    s <- as.Date(s, format=format)
  s
}

我们可以将它们更改为日期字符串,保留顺序:

str(quarters(dat$V1))
#  chr [1:6] "04-01-1970" "07-01-1970" "10-01-1970" "01-01-1971" ...

或者我们可以Date通过设置格式转换成对象:

str( quarters(dat$V1, format='%m-%d-%Y') )
#  Date[1:6], format: "1970-04-01" "1970-07-01" "1970-10-01" "1971-01-01" ...

Date所以用实际对象替换列很简单dat$V1 <- quarters(dat$V1, format='%m-%d-%Y')

于 2018-06-06T17:30:18.253 回答