我用as得到NA.日期



当我使用"as.Date"命令在r中返回Na作为结果,我尝试过不同的事情,如将其转换为POSIXt格式,但它不起作用

#this is the format i need it to read
format(Sys.Date(), "%B de %Y")
# this is an example of what i need
date="noviembre de 2022"
class(date)
#this is what i tried
date2 <- strptime(date, format = "%B de %Y")
class(date2)
date3 <- as.Date(date2,format="%B de %Y")
class(date3)
date3

这就是我得到的Na as result

我想要一个类似的

navidad2021=as.Date("25 Diciembre 2021",format="%d %B %Y")
navidad2021
[1] "2021-12-25"

但是在这种格式下

format(Sys.Date(), "%B de %Y")
[1] "December de 2022"

非常感谢您的帮助

编辑-我可能误解了你的意图。如果要从短语"2022年11月"创建日期;(我的电脑的本地设置使用英语),我们可以通过操作字符串来添加"1 "在开始和删除"de "从中间开始——然后解析。

date="November de 2022"
as.Date(paste(1, gsub("de ", "", date)), format = "%d %B %Y")
[1] "2022-11-01"

Date是r中内置的数据类型之一。当您打印日期时,它使用内置的print.Date函数将其显示为YYYY-MM-DD。您也可以创建一个字符串(正如您所做的那样)来使用另一种格式显示日期,但这样它将不再是一个可以操作的日期。

你可以覆盖print.Date在你的系统上,如果你想要它不同的打印。

print.Date <- function (x, max = NULL, ...) 
{
if (is.null(max)) 
max <- getOption("max.print", 9999L)
if (max < length(x)) {
print(format(x[seq_len(max)]), max = max + 1, ...)
cat(" [ reached 'max' / getOption("max.print") -- omitted", 
length(x) - max, "entries ]n")
}
else if (length(x)) 
print(format(x, "%B de %Y"), max = max, ...)
else cat(class(x)[1L], "of length 0n")
invisible(x)
}
as.Date("2021-12-25")
[1] "December de 2021"
as.Date("2021-12-25") + 7
[1] "January de 2022"

然而,这将不能为其他人工作,除非你覆盖他们的print.Date,这是不好的形式。

最新更新