R中的日期序列跨越BCE到AD

mad*_*oan 8 r date

我想生成从公元前10000年到现在的一系列日期.对于0 CE(或AD)来说这很容易:

ADtoNow <- seq.Date(from = as.Date("0/1/1"), to = Sys.Date(), by = "day")
Run Code Online (Sandbox Code Playgroud)

但我很难过如何在公元 0 年前生成日期.显然,我可以在现在做多年,但能够将某些东西作为BCE和AD进行绘图会很好.

the*_*ail 6

为了扩展 Ricardo 的建议,这里有一些关于事情如何运作的测试。或者不要为此工作。

我将?as.Date用粗体字母重复约书亚对未来搜索者的警告:

“注意:1CE(又名 1AD)之前的几年可能无法正确处理。”

as.integer(as.Date("0/1/1"))
[1] -719528

as.integer(seq(as.Date("0/1/1"),length=2,by="-10000 years"))
[1]  -719528 -4371953

seq(as.Date(-4371953,origin="1970-01-01"),Sys.Date(),by="1000 years")
# nonsense
 [1] "0000-01-01" "'000-01-01" "(000-01-01" ")000-01-01" "*000-01-01"
 [6] "+000-01-01" ",000-01-01" "-000-01-01" ".000-01-01" "/000-01-01"
[11] "0000-01-01" "1000-01-01" "2000-01-01"

> as.integer(seq(as.Date(-4371953,origin="1970-01-01"),Sys.Date(),by="1000 years"))
# also possibly nonsense
 [1] -4371953 -4006710 -3641468 -3276225 -2910983 -2545740 -2180498 -1815255
 [9] -1450013 -1084770  -719528  -354285    10957
Run Code Online (Sandbox Code Playgroud)

虽然这似乎确实适用于绘图:

yrs1000 <- seq(as.Date(-4371953,origin="1970-01-01"),Sys.Date(),by="1000 years")
plot(yrs1000,rep(1,length(yrs1000)),axes=FALSE,ann=FALSE)
box()
axis(2)
axis(1,at=yrs1000,labels=c(paste(seq(10000,1000,by=-1000),"BC",sep=""),"0AD","1000AD","2000AD"))
title(xlab="Year",ylab="Value")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Ric*_*rta 1

正如 @JoshuaUlrich 评论的那样,简短的答案是否定的。

但是,您可以将年份拼接到单独的列中,然后转换为整数。这对你有用吗?