给出如下数据框:
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
答案 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"))