Конвертировать символьный столбец месяца в формат год-месяц в R - PullRequest
0 голосов
/ 01 мая 2020

Для следующего кадра данных:

Month Season Boys Girls
September   Autumn  30132   28608   
October Autumn  29985   28605   
November    Autumn  28701   27400   
December    Winter  28079   26634   
January Winter  28758   27415   
February    Winter  24745   24047   
March   Spring  27848   26027   
April   Spring  27097   25542   
May Spring  29190   27409   
June    Summer  28266   26702

Как преобразовать столбец Month в формат Year-month, новый кадр данных будет выглядеть так:

Month Season Boys Girls
2018-09 Autumn  30132   28608   
2018-10 Autumn  29985   28605   
2018-11 Autumn  28701   27400   
2018-12 Winter  28079   26634   
2019-01 Winter  28758   27415   
2019-02 Winter  24745   24047   
2019-03 Spring  27848   26027   
2019-04 Spring  27097   25542   
2019-05 Spring  29190   27409   
2019-06 Summer  28266   26702

Спасибо.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Поскольку информация о годе отсутствует, просто генерируется новый месяц для каждой строки в кадре данных. Это действительно производит запрошенный вывод, но из-за отсутствующей информации не очень программируется c.

library(dplyr)    
df %>%
      mutate(Month = format(seq(
        as.Date("2018/09/01"),
        by = "month",
        length.out = length(df$Month)
      ), "%Y-%m"))
   Month   Season  Boys Girls
   <chr>   <chr>  <dbl> <dbl>
 1 2018-09 Autumn 30132 28608
 2 2018-10 Autumn 29985 28605
 3 2018-11 Autumn 28701 27400
 4 2018-12 Winter 28079 26634
 5 2019-01 Winter 28758 27415
 6 2019-02 Winter 24745 24047
 7 2019-03 Spring 27848 26027
 8 2019-04 Spring 27097 25542
 9 2019-05 Spring 29190 27409
10 2019-06 Summer 28266 26702
1 голос
/ 01 мая 2020

Зависит от того, сколько лет ваш набор данных. Решение на два года с использованием match со встроенным month.name (зависит от региона) и ISOdate:

m <- match(dat$Month, month.name)
dat <- transform(dat, Month=strftime(ISOdate(2018+((m - m[1]) < 0), m, 1), "%Y-%m"))
dat
#      Month Season  Boys Girls
# 1  2018-09 Autumn 30132 28608
# 2  2018-10 Autumn 29985 28605
# 3  2018-11 Autumn 28701 27400
# 4  2018-12 Winter 28079 26634
# 5  2019-01 Winter 28758 27415
# 6  2019-02 Winter 24745 24047
# 7  2019-03 Spring 27848 26027
# 8  2019-04 Spring 27097 25542
# 9  2019-05 Spring 29190 27409
# 10 2019-06 Summer 28266 26702

Данные

dat <- read.table(text="Month Season Boys Girls
September   Autumn  30132   28608   
October Autumn  29985   28605   
November    Autumn  28701   27400   
December    Winter  28079   26634   
January Winter  28758   27415   
February    Winter  24745   24047   
March   Spring  27848   26027   
April   Spring  27097   25542   
May Spring  29190   27409   
June    Summer  28266   26702", header=TRUE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...