Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中的日期序列,跨越公元前三十年到公元前三十年_R_Date - Fatal编程技术网

R中的日期序列,跨越公元前三十年到公元前三十年

R中的日期序列,跨越公元前三十年到公元前三十年,r,date,R,Date,我想生成一个从公元前10000年到现在的日期序列。这对于0 C.E.(或A.D.)来说很容易: ADtoNow正如@JoshuaUlrich评论的那样,简短的答案是否定的 但是,您可以将年份拼接到单独的列中,然后转换为整数。这对你有用吗 为了扩展里卡多的建议,这里有一些关于事物如何运作的测试。或者不要为那件事工作 我将用粗体大写字母重复Joshua从?as.Date中得到的警告: “注意:1CE(又名1AD)之前的年份可能无法正确处理。” 虽然这似乎在某种程度上对绘图有用: yrs1000 &l

我想生成一个从公元前10000年到现在的日期序列。这对于0 C.E.(或A.D.)来说很容易:


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,我只能猜测它在某个阶段仍然使用内部R
Date
对象。乔希的警告在这种情况下可能仍然适用。你能举个例子吗?
> 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"