R中的日期序列,跨越公元前三十年到公元前三十年
我想生成一个从公元前10000年到现在的日期序列。这对于0 C.E.(或A.D.)来说很容易:R中的日期序列,跨越公元前三十年到公元前三十年,r,date,R,Date,我想生成一个从公元前10000年到现在的日期序列。这对于0 C.E.(或A.D.)来说很容易: ADtoNow正如@JoshuaUlrich评论的那样,简短的答案是否定的 但是,您可以将年份拼接到单独的列中,然后转换为整数。这对你有用吗 为了扩展里卡多的建议,这里有一些关于事物如何运作的测试。或者不要为那件事工作 我将用粗体大写字母重复Joshua从?as.Date中得到的警告: “注意:1CE(又名1AD)之前的年份可能无法正确处理。” 虽然这似乎在某种程度上对绘图有用: yrs1000 &l
ADtoNow正如@JoshuaUlrich评论的那样,简短的答案是否定的
但是,您可以将年份拼接到单独的列中,然后转换为整数。这对你有用吗 为了扩展里卡多的建议,这里有一些关于事物如何运作的测试。或者不要为那件事工作
我将用粗体大写字母重复Joshua从?as.Date
中得到的警告:
“注意:1CE(又名1AD)之前的年份可能无法正确处理。”
虽然这似乎在某种程度上对绘图有用:
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")
yrs1000该软件包lubridate
似乎可以处理“负”年份,尽管它确实创建了一个年份0
,从上面的评论来看,这似乎是不准确的。尝试:
library(lubridate)
start <- -10000
stop <- 2013
myrange <- NULL
for (x in start:stop) {
myrange <- c(myrange,ymd(paste0(x,'-01-01')))
}
库(lubridate)
开始自从这个问题被提出以来,已经过了相当长的一段时间。随着时间的推移,出现了一个新的R包,它可以用as_gregorian
方法处理BCE时间值
下面是一个分段构建日期列表的示例,范围从公元前10000年到当前年份
library(lubridate)
library(gregorian)
# Container for the dates
dates <- c()
starting_year <- year(now())
# Add the CE dates to the list
for (year in starting_year:0){
date <- sprintf("%s-%s-%s", year, "1", "1")
dates <- c(dates, gregorian::as_gregorian(date))
}
starting_year <- "-10000"
# Add the BCE dates to the list
for (year in starting_year:0){
start_date <- gregorian::as_gregorian("-10000-1-1")
date <- sprintf("%s-%s-%s", year, "1", "1")
dates <- c(dates, gregorian::as_gregorian(date))
}
关于0AD的注释
gregorian软件包假设,当您指的是第0年时,实际上是指第1年(如下所示)。我个人认为应该抛出一个异常,但映射用户需要记住这一点
> gregorian::as_gregorian("0-1-1")
[1] "Monday January 1, 1 CE"
BCE也是如此
> gregorian::as_gregorian("-0-1-1")
[1] "Saturday January 1, 1 BCE"
鉴于?如.Date
所述,“注意:1CE(又名1AD)之前的年份可能不会得到正确处理。”我认为你不会有太多运气。仅供参考,中世纪僧侣数学不好,将“公元前1年”置于“公元前1年”之前,中间没有零年。因此,当你读到朱利叶斯·凯撒在公元前44年被暗杀时,他们实际上意味着他在公元43年被杀——在任何理性的体系中。。。很抱歉,我没有帮助解决实际问题。只是为了让所有人都不会被@criticalfix搞糊涂。那是在公历系统中。天文学和国际标准化组织的系统确实包括0年。这个问题的海报上从来没有具体说明使用哪种日历系统,所以在这一方面只有模糊性。不同的日历库以不同的方式处理格里高利历中的0年。请务必检查您的日历库的工作方式,以避免出现一次性错误。由于不知道lubridate,我只能猜测它在某个阶段仍然使用内部RDate
对象。乔希的警告在这种情况下可能仍然适用。你能举个例子吗?
> gregorian_date <- gregorian::as_gregorian("-10000-1-1")
> gregorian_date$bce
[1] TRUE
> gregorian_date$year
[1] 10001
> gregorian::as_gregorian("0-1-1")
[1] "Monday January 1, 1 CE"
> gregorian::as_gregorian("-0-1-1")
[1] "Saturday January 1, 1 BCE"