2013-02-19 8 views
8

Vorrei generare una sequenza di date da 10.000 B.C.E. al presente. Questo è facile per 0 C.E. (o dC):Sequenza di date in R spanning B.C.E. a A.D

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

ma sono perplesso su come generare le date prima 0 dC. Ovviamente, potrei fare anni prima del presente ma sarebbe bello poter disegnare qualcosa come BCE e AD.

+3

Dato '? As.Date' dice," Nota: anni prima 1CE (aka 1AD) probabilmente non verrà gestito correttamente. " Non penso che avrai molta fortuna. –

+4

FYI, i monaci medievali erano cattivi in ​​matematica, e fece l'anno "1 aC" immediatamente precedere "1 AD", senza un anno zero in mezzo. Quindi, quando leggi che Giulio Cesare fu assassinato nel 44 aC, in realtà significa che fu ucciso nell'anno -43 in qualsiasi sistema razionale. ... Mi dispiace non sto aiutando con il problema reale. – criticalfix

risposta

1

Come commentato da @JoshuaUlrich, la risposta breve è no.

Tuttavia, è possibile unire l'anno in una colonna separata e quindi convertirlo in numero intero. Funzionerebbe per te?

4

Per ampliare il suggerimento di Ricardo, ecco alcuni test su come funzionano le cose. O non lavorare per quella questione.

Ripeterò gli avvisi di Joshua tratto da ?as.Date per ricercatori future in lettere grandi in grassetto:

"Nota: Anni prima 1CE (aka 1AD) probabilmente non saranno gestiti correttamente."

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 

Anche se questo sembra funzionare per la rappresentazione grafica un po ':

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

enter image description here

0

Il pacchetto lubridate sembra trattare anni "negativi" ok, anche se lo fa creare un anno 0, che dai commenti di cui sopra sembra essere impreciso. Prova:

library(lubridate) 

start <- -10000 

stop <- 2013 

myrange <- NULL 

for (x in start:stop) { 

    myrange <- c(myrange,ymd(paste0(x,'-01-01'))) 
} 
+1

Non conoscendo 'lubridate', posso solo immaginare che usi ancora gli oggetti interni R' Date' ad un certo punto. L'avvertimento di Josh probabilmente è ancora valido in quel caso. – thelatemail

Problemi correlati