Квартальные данные - коэффициент преобразования в дату - PullRequest
0 голосов
/ 05 февраля 2019

Невозможно преобразовать столбец даты из фактора в тип даты.Я пробовал базовые стратегии r и lubridate:

> as.Date(df)
Error in as.Date.default(x, ...) : 
  do not know how to convert 'x' to class “Date”

> yq(df)
[1] NA
Warning message:
All formats failed to parse. No formats found. 

Данные:

df<- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("2008-07-31", 
"2009-07-31", "2010-07-31", "2011-07-31", "2012-07-31", "2013-07-31", 
"2014-07-31", "2011-10-31", "2012-10-31", "2013-10-31", "2014-10-31", 
"2016-10-31", "2017-10-31"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Применить as.Date к столбцу Date, а не ко всему data.frame.Пакеты не используются.

transform(df, Date = as.Date(Date))

предоставление:

        Date
1 2008-07-31
2 2008-07-31
3 2008-07-31
4 2008-07-31
5 2008-07-31
6 2008-07-31
0 голосов
/ 05 февраля 2019

Ответ выше показал базовый подход к вашему вопросу.Я использовал пакеты tidyverse, чтобы сделать то же самое, просто как другой способ.

Прежде всего, мы посмотрим на ваши данные

df<- structure(list(Date = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("2008-07-31", 
"2009-07-31", "2010-07-31", "2011-07-31", "2012-07-31", "2013-07-31", 
"2014-07-31", "2011-10-31", "2012-10-31", "2013-10-31", "2014-10-31", 
"2016-10-31", "2017-10-31"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

print(df)

        Date
1 2008-07-31
2 2008-07-31
3 2008-07-31
4 2008-07-31
5 2008-07-31
6 2008-07-31

Если мы посмотрим на структуру фрейма данных, то увидим, что даты хранятся в виде коэффициентов

str(df)

'data.frame':   6 obs. of  1 variable:
 $ Date: Factor w/ 13 levels "2008-07-31","2009-07-31",..: 1 1 1 1 1 1

Нам нужно загрузить некоторые библиотеки.Единственное, что требует объяснения, - это пакет magrittr, который предоставляет удобный оператор %<>%, который присваивает результаты операций на правой стороне конвейера исходной переменной

library(tidyverse)
library(lubridate)
library(magrittr)

. Таким образом, вниже по конвейеру мы -

  • передаем фрейм данных df дат в виде коэффициентов через as_tibble(), который преобразует его в формат tidyverse tibble
  • , затем используем функцию mutateчтобы перезаписать столбец Date,
  • заменив его значение результатами функции lubridate ymd, которая является вспомогательной функцией, которая анализирует даты в факторных или строковых форматах в структуре year-month-date.Эквивалентом может быть dmy, если данные в формате day-month-year.
df %<>%
  as_tibble() %>%
  mutate(
    Date = ymd(Date)
  )

Теперь, когда все готово, мы можем посмотреть на данные

print(df)
# A tibble: 6 x 1
  Date      
  <date>    
1 2008-07-31
2 2008-07-31
3 2008-07-31
4 2008-07-31
5 2008-07-31
6 2008-07-31

Теперь вы можете видеть, что даты теперь сохраняются как тип данных date.

Заключительный комментарий -

Если вы хотите создать таблицы данных вручную или tibbles, взгляните на функцию tribble следующим образом, где мы вручную создаем тот же тиббл, что иВы сделали, затем приведите тип данных к factor

df <- tribble(
    ~Date,
    "2008-07-31", 
    "2009-07-31", 
    "2010-07-31", 
    "2011-07-31", 
    "2012-07-31", 
    "2013-07-31", 
    "2014-07-31", 
    "2011-10-31", 
    "2012-10-31", 
    "2013-10-31", 
    "2014-10-31", 
    "2016-10-31", 
    "2017-10-31") 


df %<>%
  mutate(
    Date = as_factor(Date)
  )

glimpse(df)

Observations: 13
Variables: 1
$ Date <fct> 2008-07-31, 2009-07-31, 2010-07-31, 2011-07-31, 2012-07-31, 2013-07-31, 2014-07-31, 2011-10-31, 2012-10-31, 2013-10-31, 2014-10-31...
...