簡體   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