将序号指示符添加到日期

  • 本文关键字:日期 添加 指示符 r
  • 更新时间 :
  • 英文 :


我想知道是否有一种简单的方法可以用日期后缀格式化日期。

我在以下情况下创建了一个函数:

add.suffix <- function (x) if(day(x) %in% c(1, 21, 31)) { paste0(day(x), "st", format(x, "%B %Y"))
  } else if (day(x) %in% c(2, 22)){ paste0(day(x), "nd ", format(x, "%B %Y"))
  } else paste0(day(x), "th ", format(x, "%B %Y"))
add.suffix(Sys.Date())

我还想在POSIXlt中转换回那个字符。

如果使用lubridate,最简单的方法是函数dmy

dmy(add.suffix(Sys.Date()))

这些不使用任何包。示例都使用此输入:

x <- "9th November 2015"

1)删除ndth,并将余数转换为"Date"类,然后转换为"POSIXlt":

as.POSIXlt(as.Date(sub("nd|th", "", x), "%d %B %Y"))
[1] "2015-11-09 UTC"

2)这对thnd都进行了尝试,并采取了有效的方法:

as.POSIXlt(na.omit(c(as.Date(x, "%dth %B %Y"), as.Date(x, "%nd %B %Y"))))

3)这与(2)类似,但使用了FilterNegatelapply,这样我们就可以在向量中放置替代格式:

fmts <- c("%dth %B %Y", "%dnd %B %Y")
as.POSIXlt(Filter(Negate(is.na), lapply(fmts, as.Date, x = x))[[1]])

您可能更喜欢将其转换为"Date"类,而不是"POSIXlt",因为它只是一个日期。在上述任何方法中,只需省略as.POSIXlt部分。

最新更新