给定一个数据帧,如下所示:
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
?谢谢。
输出1:
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
输出2:
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
您可以使用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
要转换为日期,通常需要三个组件年,月和日。我们在数据中有年份和月份,我们可以在这里使用paste0
添加任意日期(01
(。
如果年份中的"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"))