10

紀元前 10,000 年から現在までの一連の日付を生成したいと思います。これは、CE (または AD) が 0 の場合は簡単です。

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

しかし、私は 0 ADより前の日付を生成する方法について困惑しています。明らかに、私は現在よりも何年も前に行うことができましたが、何かを BCE と AD としてグラフ化できるとよいでしょう。

4

4 に答える 4

6

Ricardo の提案を拡張するために、動作のテストをいくつか示します。または、そのために働かないでください。

?as.Date将来の検索者のために大きな太字でJoshua の警告を繰り返します。

「注: 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

これはある程度グラフ化には機能するようですが:

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")

ここに画像の説明を入力

于 2013-02-19T22:23:45.710 に答える
1

@JoshuaUlrich がコメントしたように、短い答えはノーです。

ただし、年を別の列に分割して整数に変換することはできます。これはうまくいきますか?

于 2013-02-19T22:02:09.170 に答える
0

パッケージlubridateは「負の」年を処理しているようですが、1年0を作成します。これは、上記のコメントからは不正確であるように思われます。試す:

library(lubridate)

start <- -10000

stop <- 2013

myrange <- NULL

for (x in start:stop) {

     myrange <- c(myrange,ymd(paste0(x,'-01-01')))
}
于 2013-02-19T22:29:49.500 に答える