如何在 R 中将 "year.month" 格式更改为 "Year-Month" 格式
How to change "year.month" format into "Year-Month" format in R
我有一个如下所示的数据框:
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
如您所见,“月份”列是格式为“year.month”的日期。我想将此列重新格式化为传统的“%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
我怎样才能将此列的格式更改为可识别为日期列?目前,“月份”列的 class 是数字。
您可以使用 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
使用 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 中处理日期(和时间)数据的黄金标准包。找到 cheatsheat here.
我有一个如下所示的数据框:
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
如您所见,“月份”列是格式为“year.month”的日期。我想将此列重新格式化为传统的“%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
我怎样才能将此列的格式更改为可识别为日期列?目前,“月份”列的 class 是数字。
您可以使用 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
使用 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 中处理日期(和时间)数据的黄金标准包。找到 cheatsheat here.