【问题标题】:How to change "year.month" format into "Year-Month" format in R如何在R中将“年月”格式更改为“年月”格式
【发布时间】:2021-12-11 07:05:59
【问题描述】:

我有一个如下所示的数据框:

Month           GSI
1993.01     -0.57567056
1993.02     -1.15549239
1993.03     -1.00353071
1993.04     -0.10698880
1993.05     -0.31903591
1993.06      0.30361638
1993.07      1.24528915
1993.08      0.85104370
1993.09      1.24680092
1993.10      1.42521406

如您所见,“月”列是“年.月”格式的日期。我想将此列重新格式化为传统的“%Y-%m”格式,以便数据框看起来更像这样:

  Date          GSI
1993-01     -0.57567056
1993-02     -1.15549239
1993-03     -1.00353071
1993-04     -0.10698880
1993-05     -0.31903591
1993-06      0.30361638
1993-07      1.24528915
1993-08      0.85104370
1993-09      1.24680092
1993-10      1.42521406

如何更改此列的格式以使其可识别为日期列?目前,“月”列的类是数字。

【问题讨论】:

  • 甚至 - df$Month <- sub('.', '-', fixed = TRUE, df$Month)

标签: r date reformatting


【解决方案1】:

您可以使用sub,在正则表达式中捕获组:

df$Month <- sub("^(\\d{4})\\.(\\d{2})$", "\\1-\\2", format(df$Month, 2))

df
#>      Month        GSI
#> 1  1993-01 -0.5756706
#> 2  1993-02 -1.1554924
#> 3  1993-03 -1.0035307
#> 4  1993-04 -0.1069888
#> 5  1993-05 -0.3190359
#> 6  1993-06  0.3036164
#> 7  1993-07  1.2452892
#> 8  1993-08  0.8510437
#> 9  1993-09  1.2468009
#> 10 1993-10  1.4252141

输入数据

df <- structure(list(Month = c(1993.01, 1993.02, 1993.03, 1993.04, 
1993.05, 1993.06, 1993.07, 1993.08, 1993.09, 1993.1), GSI = c(-0.57567056, 
-1.15549239, -1.00353071, -0.1069888, -0.31903591, 0.30361638, 
1.24528915, 0.8510437, 1.24680092, 1.42521406)), class = "data.frame", row.names = c(NA, 
-10L))

df
#>      Month        GSI
#> 1  1993.01 -0.5756706
#> 2  1993.02 -1.1554924
#> 3  1993.03 -1.0035307
#> 4  1993.04 -0.1069888
#> 5  1993.05 -0.3190359
#> 6  1993.06  0.3036164
#> 7  1993.07  1.2452892
#> 8  1993.08  0.8510437
#> 9  1993.09  1.2468009
#> 10 1993.10  1.4252141

【讨论】:

    【解决方案2】:

    使用lubridate 包。

    library(dplyr)
    library(lubridate)
    df <- mutate(df, date = ym(Month))
    
    # if you don't know dplyr, use:
    df$date <- ym(df$Month)
    

    请注意,此解决方案还将结果强制转换为 POSIXct(日期)格式的变量。 Transmute 变异和删除以及月份变量。

    lubridate 是在 R 中处理日期(和时间)数据的黄金标准包。查找秘籍here

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2015-04-29
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 2015-02-03
      • 2016-10-23
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多