我想知道是否有一种简单的方法可以在当天使用后缀格式化日期。
我创建了一个函数:
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中转换回那个角色。
答案 0 :(得分:1)
如果您使用lubridate
,最简单的方法是函数dmy
。
dmy(add.suffix(Sys.Date()))
答案 1 :(得分:0)
这些不使用任何包。这些示例都使用此输入:
x <- "9th November 2015"
1)删除nd
和th
并将余下的内容转换为"Date"
课程,然后转换为"POSIXlt"
:
as.POSIXlt(as.Date(sub("nd|th", "", x), "%d %B %Y"))
[1] "2015-11-09 UTC"
2)这会同时使用th
和nd
进行尝试,并采用以下方法:
as.POSIXlt(na.omit(c(as.Date(x, "%dth %B %Y"), as.Date(x, "%nd %B %Y"))))
3)这类似于(2),但使用Filter
,Negate
和lapply
,以便我们可以将替代格式放在矢量中:
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
部分。