繁体   English   中英

R中的字符月列转换为年月格式

[英]Convert character month column into year-month format in R

给定一个 dataframe 如下:

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格式,新的 dataframe 将如下所示:

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

谢谢。

取决于您的数据集有多少年。 两年使用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)

由于没有年份信息,这只会为 dataframe 中的每一行生成一个新月份。 它确实产生了所请求的 output,但由于缺少信息,因此并不是非常具有编程性。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM