Изменение квартальных дат на месячные - PullRequest
0 голосов
/ 26 марта 2020

В настоящее время я пытаюсь вычесть 2 месяца за каждый 1-й, 4-й, 7-й и т. Д. c ... месяц с намерением завершиться в конце месяца.

В настоящее время я пытаюсь вычесть 1 месяц за каждый 2-й, 5-й, 8-й и т. д. c ... месяц с намерением завершиться в конце месяца.

И я не хочу вычитать месяцы за каждые 3-й, 6-й, 9-й и т. 1013 * ...
Что у меня сейчас есть

month_df <- 
  tibble::tribble(
    ~V1, ~V2, ~V3,
    105, 20080331, -0.087372, 
    105,  20080331, -0.01609, 
    105,  20080331, -0.022895,
    105,  20080630, 0.083682,
    105,  20080630, 0.034749,
    105,  20080630, -0.11045,
    105,  20080930, -0.01594,
    105,  20080930, -0.02046,
    105,  20080930, -0.14796,
    )

Чего я хочу достичь

month_df <- 
  tibble::tribble(
    ~V1, ~V2, ~V3,
    105, 20080131, -0.087372, 
    105,  20080229, -0.01609, 
    105,  20080331, -0.022895,
    105,  20080430, 0.083682,
    105,  20080530, 0.034749,
    105,  20080630, -0.11045,
    105,  20080731, -0.01594,
    105,  20080829, -0.02046,
    105,  20080930, -0.14796,
    )

1 Ответ

0 голосов
/ 26 марта 2020

Определите функцию no2ym, которая преобразует из числа c формат даты в вопросе в класс yearmon и другую ym2no, которая преобразует обратно, используя конец месяца.

После использования no2ym, поскольку yearmon представляет год / месяц по году + 0 для января, год + 1/12 для февраля и так далее, мы можем просто вычесть 2: 0/12 из этого. Наконец, конвертируйте обратно, используя ym2no.

library(zoo)

no2ym <- function(x) as.yearmon(as.character(x), format = "%Y%m%d")
ym2no <- function(x) as.numeric(format(as.Date(x, frac = 1), "%Y%m%d"))

month_df %>%  mutate(V2 = ym2no(no2ym(V2) - 2:0/12))

, что дает:

# A tibble: 9 x 3
     V1       V2      V3
  <dbl>    <dbl>   <dbl>
1   105 20080131 -0.0874
2   105 20080229 -0.0161
3   105 20080331 -0.0229
4   105 20080430  0.0837
5   105 20080531  0.0347
6   105 20080630 -0.110 
7   105 20080731 -0.0159
8   105 20080831 -0.0205
9   105 20080930 -0.148 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...