在R中导出数据时,如何将Mon年的字符串转换为正确的日期格式?
当我将R中的数据作为csv导出时,我试图确保As_of_Dt正确地转换为日期。目前,当我将数据导出到excel时。它错误地转换了_Dt的As_。月份基本保持不变,但年份变为日期,年份变为当前年份(2020年)。如果截止日期为1月18日,则在excel中变为1/18/20。我正试图阻止这种事情发生 我希望本专栏导出如下内容: 当字符串为“1月18日”时为1/1/18 目前,我试过了在R中导出数据时,如何将Mon年的字符串转换为正确的日期格式?,r,date,R,Date,当我将R中的数据作为csv导出时,我试图确保As_of_Dt正确地转换为日期。目前,当我将数据导出到excel时。它错误地转换了_Dt的As_。月份基本保持不变,但年份变为日期,年份变为当前年份(2020年)。如果截止日期为1月18日,则在excel中变为1/18/20。我正试图阻止这种事情发生 我希望本专栏导出如下内容: 当字符串为“1月18日”时为1/1/18 目前,我试过了 Data$As_of_Dt2<- zoo::as.Date(zoo::as.yearmon(Data$As_o
Data$As_of_Dt2<- zoo::as.Date(zoo::as.yearmon(Data$As_of_Dt, "%y-%b"))
Data$As_of_Dt2您可以使用strtime
strptime(dat, "%d-%b")
# [1] "2020-11-20 CET" "2020-11-15 CET" "2020-01-20 CET" "2020-06-20 CEST"
# [5] "2020-02-20 CET" "2020-04-19 CEST" "2020-12-16 CET" "2020-08-20 CEST"
# [9] "2020-01-17 CET" "2020-01-16 CET" "2020-10-17 CEST" "2020-06-19 CEST"
# [13] "2020-08-17 CEST" "2020-05-16 CEST" "2020-10-16 CEST" "2020-08-18 CEST"
# [17] "2020-11-19 CET" "2020-01-15 CET" "2020-12-17 CET" "2020-11-18 CET"
数据:
dat我们可以使用as.yearmon
library(zoo)
as.Date( as.yearmon(dat, "%d-%b"))
#[1] "2020-11-01" "2020-11-01" "2020-01-01" "2020-06-01" "2020-02-01" "2020-04-01" "2020-12-01" "2020-08-01"
#[9] "2020-01-01" "2020-01-01" "2020-10-01" "2020-06-01" "2020-08-01" "2020-05-01" "2020-10-01" "2020-08-01"
#[17] "2020-11-01" "2020-01-01" "2020-12-01" "2020-11-01"
as.Date(as.yearmon(sub("^([A-Za-z]+)-(\\d+)$", "\\2-\\1", dat), "%d-%b"))
如果我们有一些混合格式,即%b-%d
以及文章中显示的格式,一个选项是使用sub
重新排列子字符串,使其成为单一格式,然后将应用为.yearmon
library(zoo)
as.Date( as.yearmon(dat, "%d-%b"))
#[1] "2020-11-01" "2020-11-01" "2020-01-01" "2020-06-01" "2020-02-01" "2020-04-01" "2020-12-01" "2020-08-01"
#[9] "2020-01-01" "2020-01-01" "2020-10-01" "2020-06-01" "2020-08-01" "2020-05-01" "2020-10-01" "2020-08-01"
#[17] "2020-11-01" "2020-01-01" "2020-12-01" "2020-11-01"
as.Date(as.yearmon(sub("^([A-Za-z]+)-(\\d+)$", "\\2-\\1", dat), "%d-%b"))
数据
dat您是否可以使用dput
来显示示例如果As\u of_Dt
列是字符或因子,是否可能某些值具有前导/尾随空格?这里最明显的解释是,并非所有的值都符合%y-%b
。使用ym创建测试数据我认为问题在于,有时它是年-月,有时它是月-年。我不知道为什么从excel导出文档时没有反映出这一点。是否有一个函数可以将这两种情况转换为指定的格式?我意识到有两种不同的情况,一种是月份在1月18日之前,另一种是年份在1月18日之前。我想这就是为什么这段代码对我不起作用的原因。有没有一种替代方法可以将这两种情况转换为日期格式。谢谢