Переформатирование загруженных данных Excel - PullRequest
0 голосов
/ 06 июня 2018

Я скачал некоторые данные о ВВП в формате .xls с веб-сайта ОЭСР.Однако, чтобы эти данные работали в R, мне нужно переформатировать данные в файл .csv.В частности, мне нужен год, день и месяц в первом столбце, а после запятой мне нужны значения ВВП (например: 1990-01-01, 234590).

Столбец со значениями ВВП можетлегко копировать и транспонировать, но как быстро добавить даты?Есть ли быстрый способ сделать это, не добавляя даты вручную?

Example output

Спасибо за помощь!

Бест, Шон

PS.Ссылка на (один из) определенных файлов ОЭСР: https://ufile.io/8ogav или https://stats.oecd.org/index.aspx?queryid=350#

PSS.Теперь я изменил файл следующим образом:

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

1 Ответ

0 голосов
/ 06 июня 2018

Использование ваших данных:

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').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...