Есть ли функция R для форматирования временного ряда в процентах к числовому? - PullRequest
1 голос
/ 10 ноября 2019

У меня большой временной ряд интересов, отформатированный в процентах. Мне нужно, чтобы временные ряды были отформатированы в числах (процент, деленный на 100) вместо процента. Есть ли функция для этого?

Мой временной ряд:


NBdata10YS=xts(x=NBdata10YS$OBS_VALUE,order.by = as.Date(as.yearmon(NBdata10YS$TIME_PERIOD)))

NBdata5YS=xts(x=NBdata5YS$OBS_VALUE,order.by = as.Date(as.yearmon(NBdata5YS$TIME_PERIOD)))

NBdata3YS=xts(x=NBdata3YS$OBS_VALUE,order.by = as.Date(as.yearmon(NBdata3YS$TIME_PERIOD)))

StatsobligasjonerNB=merge(NBdata10YS,NBdata5YS, NBdata3YS)

Данные.

NBdata3YS <-
structure(c(6.03, 5.65, 5.94, 6.19, 6.03, 5.95, 
5.95, 6.06, 5.89, 5.75, 5.72, 5.5, 5.33, 5.29, 
5.28, 5.33, 5.5, 5.47, 5.4, 5.47 ), class = c("xts", 
"zoo"), .indexCLASS = "Date", tclass = "Date", 
.indexTZ = "UTC", tzone = "UTC", index = 
structure(c(852076800, 854755200, 857174400, 859852800, 
862444800, 865123200, 867715200, 870393600, 873072000, 
875664000, 878342400, 880934400, 883612800, 886291200, 
888710400, 891388800, 893980800, 896659200, 899251200, 
901929600), tzone = "UTC", tclass = "Date"), 
.Dim = c(20L, 1L ))

Ответы [ 2 ]

0 голосов
/ 10 ноября 2019

Я не уверен, в чем может быть проблема. Объекты класса 'zoo' или 'xts' - это действительно числовые матрицы со специальными индексными атрибутами. Так что простого использования оператора деления должно быть достаточно:

library(xts)
NBdata3YS/100
             [,1]
1997-01-01 0.0603
1997-02-01 0.0565
1997-03-01 0.0594
1997-04-01 0.0619
1997-05-01 0.0603
1997-06-01 0.0595
1997-07-01 0.0595
1997-08-01 0.0606
1997-09-01 0.0589
1997-10-01 0.0575
1997-11-01 0.0572
1997-12-01 0.0550
1998-01-01 0.0533
1998-02-01 0.0529
1998-03-01 0.0528
1998-04-01 0.0533
1998-05-01 0.0550
1998-06-01 0.0547
1998-07-01 0.0540
1998-08-01 0.0547

Это также относится к временным рядам объединенного xts:

M <- merge(NBdata3YS,NBdata3YS) 
#-------------
> M/100
           NBdata3YS NBdata3YS.1
1997-01-01    0.0603      0.0603
1997-02-01    0.0565      0.0565
1997-03-01    0.0594      0.0594
1997-04-01    0.0619      0.0619
1997-05-01    0.0603      0.0603
1997-06-01    0.0595      0.0595
1997-07-01    0.0595      0.0595
1997-08-01    0.0606      0.0606
1997-09-01    0.0589      0.0589
1997-10-01    0.0575      0.0575
1997-11-01    0.0572      0.0572
1997-12-01    0.0550      0.0550
1998-01-01    0.0533      0.0533
1998-02-01    0.0529      0.0529
1998-03-01    0.0528      0.0528
1998-04-01    0.0533      0.0533
1998-05-01    0.0550      0.0550
1998-06-01    0.0547      0.0547
1998-07-01    0.0540      0.0540
1998-08-01    0.0547      0.0547
0 голосов
/ 10 ноября 2019

Вот функция для автоматизации задачи в вопросе.

perc2num <- function(x) {
  if(is.character(x)){
    x <- ifelse(grepl('%', x), sub('%', '', x), x)
    as.numeric(x)/100
  }else if(is.numeric(x)){
    x/100
  }
}

a <- c(12, 34.5, 83.7)
b <- c('12', '34.5', '83.7')
d <- c('12%', '34.5%', '83.7 %')

perc2num(a)
perc2num(b)
perc2num(d)

Поскольку NBdata3YS и другие серии являются "xts" объектами, просто вызовите функцию с объектом в качестве аргумента.

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