将序数指标添加到日期

时间:2015-11-09 16:05:56

标签: 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中转换回那个角色。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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部分。