将字符串日期列转换为R中的标准日期

时间:2020-06-24 09:48:03

标签: r

给出如下数据框:

         date    value   price
0  2010Y1-01m      NaN     NaN
1  2010Y1-02m   365.07  158.18
2  2010Y1-03m   653.19  268.53
3  2010Y1-04m   980.72  331.81
4  2010Y1-05m  1455.60  434.19

如何将date列转换为标准日期,%Y-%m-%d%Y-%m?谢谢。

Out1:

         date    value   price
0  2010-01-01      NaN     NaN
1  2010-02-01   365.07  158.18
2  2010-03-01   653.19  268.53
3  2010-04-01   980.72  331.81
4  2010-05-01  1455.60  434.19 

Out2:

     date     value   price
0  2010-01      NaN     NaN
1  2010-02   365.07  158.18
2  2010-03   653.19  268.53
3  2010-04   980.72  331.81
4  2010-05  1455.60  434.19

1 个答案:

答案 0 :(得分:1)

您可以使用as.Date转换为日期,然后使用format获取年月格式的数据。

df$Date <- as.Date(paste0(df$date, '-01'), "%YY1-%mm-%d")
df$year_mon <- format(df$Date, "%Y-%m")

df
#        date   value  price year_mon
#0 2010-01-01     NaN    NaN  2010-01
#1 2010-02-01  365.07 158.18  2010-02
#2 2010-03-01  653.19 268.53  2010-03
#3 2010-04-01  980.72 331.81  2010-04
#4 2010-05-01 1455.60 434.19  2010-05

要转换为日期,通常我们需要三个组成部分:年,月和日期。数据中有年份和月份,我们可以在此处使用01添加任意日期(paste0)。


如果年份中的"Y1"部分不固定并且可以是任意数字(例如"Y2""Y3"),则可以在转换为日期之前使用sub删除该部分。

df$Date <- as.Date(sub('Y\\d+', '-01', df$date), "%Y-%d-%mm")

数据

df <- structure(list(date = c("2010Y1-01m", "2010Y1-02m", "2010Y1-03m", 
"2010Y1-04m", "2010Y1-05m"), value = c(NaN, 365.07, 653.19, 980.72, 
1455.6), price = c(NaN, 158.18, 268.53, 331.81, 434.19)), class = 
"data.frame", row.names = c("0","1", "2", "3", "4"))