将Excel数字日期转换为R日期,但在某些行中只有给定的年份,例如“年”;2018年“;而不是",;43465“;
我读了一个Excel文件,其中一列包含日期。在某些行中没有完整的日期,但只给出了年份,例如2018年。 我在R中得到的是将Excel数字日期转换为R日期,但在某些行中只有给定的年份,例如“年”;2018年“;而不是",;43465“;,r,date,excel-dates,R,Date,Excel Dates,我读了一个Excel文件,其中一列包含日期。在某些行中没有完整的日期,但只给出了年份,例如2018年。 我在R中得到的是 > df$date [1] NA NA 43465 43465 43465 43465 2018 NA 43465 43465 43465 43465 我想将这些行转换为完整日期的日期格式,即在我的示例中,只有43465的行保持不变,其他行保持不变,即NA应保持NA和2018应保持2018 我知道我可以将Excel日期转换为如下as.Date(df
> df$date
[1] NA NA 43465 43465 43465 43465 2018 NA 43465 43465 43465 43465
我想将这些行转换为完整日期的日期格式,即在我的示例中,只有43465
的行保持不变,其他行保持不变,即NA
应保持NA
和2018
应保持2018
我知道我可以将Excel日期转换为如下as.Date(df$Date,origin=“1899-12-30”)
,但以下两个想法给了我错误的输出
> as.Date(df$date, origin="1899-12-30")
[1] NA NA "2018-12-31" "2018-12-31" "2018-12-31" "2018-12-31" "1905-07-10" NA "2018-12-31" "2018-12-31" "2018-12-31"
[12] "2018-12-31"
当然,“1905-07-10”
不是我所期望的
> ifelse(df$date == 2018, 2018, as.Date(df$date, origin="1899-12-30"))
[1] NA NA 17896 17896 17896 17896 2018 NA 17896 17896 17896 17896
这里错误的输出是显而易见的。一个向量不能有多个类。其中可以包含数字类或日期类。解决方法是使用最通用的字符类
x <- c(NA,NA,43465,43465,43465,43465,2018,NA,43465,43465, 43465, 43465)
ifelse(x == 2018, "2018", as.character(as.Date(x, origin="1899-12-30")))
# [1] NA NA "2018-12-31" "2018-12-31" "2018-12-31" "2018-12-31" "2018"
# [8] NA "2018-12-31" "2018-12-31" "2018-12-31" "2018-12-31"
基于@Ronak的答案,您可以使用正则表达式确定一个四位数字,然后用四个尾随零填充
x <- c(NA,NA,43465,43465,43465,43465,2018,NA,43465,43465, 43465, 43465)
ifelse(grepl('^\\d{4}$', x, perl = TRUE),
as.integer(paste0(x, '0000')),
as.integer(format(as.Date(x, origin='1899-12-30'), '%Y%m%d')))
[1] NA NA 20181231 20181231 20181231 20181231 20180000 NA 20181231 20181231 20181231 20181231
x谢谢,但不幸的是两者都不能解决我的问题,因为我确实需要数据框中的数据,并且我需要能够比较两个日期,也就是说,2018-12-31>2017-12-31
应该返回TRUE
,并且带有字符,这是不可能的。@user29184既然您无法将2018与任何日期进行比较,为什么要保留2018。您也可以将其设置为NA
。
x <- c(NA,NA,43465,43465,43465,43465,2018,NA,43465,43465, 43465, 43465)
ifelse(grepl('^\\d{4}$', x, perl = TRUE),
as.integer(paste0(x, '0000')),
as.integer(format(as.Date(x, origin='1899-12-30'), '%Y%m%d')))
[1] NA NA 20181231 20181231 20181231 20181231 20180000 NA 20181231 20181231 20181231 20181231