преобразовать квартальный год в последнюю дату квартала в R - PullRequest
0 голосов
/ 24 апреля 2020

У меня проблема при использовании as.Date(as.yearqtr(test[,1],format ="%qQ%Y"),frac =1), но она возвращает ошибку, и год за квартал не изменился. Ошибка: error in as.yearqtr(as.numeric(x)) (list) object cannot be coerced to type 'double'

Это мой фрейм данных в R.

TIME   VALUE
1Q2019  1
2Q2019  2
3Q2019  3
4Q2019  4

Идеальный выход

TIME   VALUE
2019-03-31  1
2019-06-30  2
2019-09-30  3
2019-12-31  4

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Мы можем преобразовать дату в зоопарк и получить последнюю дату квартала с frac. Мы используем некоторый RegEx для перестановки в подходящий формат zoo:

df$TIME=as.Date(as.yearqtr(gsub("(\\d)(Q)(\\d{1,})","\\3 Q\\1",df$TIME)),frac = 1)
 df
        TIME VALUE
1 2019-03-31     1
2 2019-06-30     2
3 2019-09-30     3
4 2019-12-31     4

Данные:

df <-structure(list(TIME = structure(1:4, .Label = c("1Q2019", "2Q2019", 
"3Q2019", "4Q2019"), class = "factor"), VALUE = 1:4), class = "data.frame", row.names = c(NA, 
-4L))
0 голосов
/ 24 апреля 2020

Вот функция, которая будет возвращать вектор дат, учитывая входной вектор в форме 1Q2019 ...

dateStrings <- c("1Q2019","2Q2019","3Q2019","4Q2019","1Q2020")

lastDayOfQuarter <- function(x){
     require(lubridate)
     result <- NULL
     months <-c(3,6,9,12)
     days <- c(31,30,30,31)

     for(i in 1:length(x)) {
          qtr <- as.numeric(substr(x[i],1,1))
          result[i] <- mdy(paste(months[qtr],days[qtr],(substr(x[i],3,6)),sep="-")) 
     }
     as.Date(result)

}
lastDayOfQuarter(dateStrings)

и вывод:

>lastDayOfQuarter(dateStrings)
[1] "2019-03-31" "2019-06-30" "2019-09-30" "2019-12-31" "2020-03-31"
> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...