Как использовать оконную функцию R для триместров коротких временных рядов? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть этот короткий временной ряд

Semester    E
2015-01 828
2015-05 277
2015-08 2105
2016-01 1926
2016-05 619
2016-08 2389
2017-01 2522
2017-05 598
2017-08 2541
2018-01 2200
2018-05 644
2018-08 2541
2019-01 2031

Я хотел бы преобразовать его в это с помощью оконной функции в R до 2018 (пропустить 2019)

Финальный стол такой:

          1 2   3
2015    828 277 2105
2016    1926    619 2389
2017    2522    598 2541
2018    2200    644 2541

Как я могу сделать это, используя оконную функцию?

1 Ответ

0 голосов
/ 19 апреля 2019

Один из вариантов - извлечь год и затем spread

library(dplyr)
library(lubridate)
library(tidyr)
df1 %>% 
    group_by(Year = year(dmy(Term))) %>%
    mutate(rn = row_number()) %>% 
    select(-Term) %>% 
    spread(rn, E)
# A tibble: 5 x 4
# Groups:   Year [5]
#   Year   `1`   `2`   `3`
#  <dbl> <int> <int> <int>
#1  2015   828   277  2105
#2  2016  1926   619  2389
#3  2017  2522   598  2541
#4  2018  2200   644  2541
#5  2019  2301    NA    NA

или с использованием base R

Year <- format(as.Date(df1$Term, "%d/%m/%Y"), "%Y")
s1 <- ave(seq_along(Year), Year, FUN = seq_along)
xtabs(df1$E ~ Year + s1)

data

df1 <- structure(list(Term = c("1/1/2015", "5/1/2015", "8/1/2015", 
 "1/1/2016", "5/1/2016", "8/1/2016", "1/1/2017", "5/1/2017", "8/1/2017", 
 "1/1/2018", "5/1/2018", "8/1/2018", "1/1/2019"), E = c(828L, 
 277L, 2105L, 1926L, 619L, 2389L, 2522L, 598L, 2541L, 2200L, 644L, 
 2541L, 2301L)), class = "data.frame", row.names = c(NA, -13L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...