2009-12-25 21 views
45

Tengo varias listas de mediciones. En cada lista, tiene el timestramp formateado como una cadena ("2009-12-24 21: 00: 07.0") y sé que cada medición en la lista está separada por 5 segundos. Quiero combinar todos los datos en un gran data.frame en R. Luego, deseo poder acceder fácilmente a la diferencia horaria de dos mediciones, así que probablemente debería convertir los datos en algo diferente de los caracteres.Tratando con marcas de tiempo en R

¿Qué formato debo usar para almacenar los horarios? ¿Hay algún formato de tiempo en algún paquete que deba usar?

Respuesta

58

Desea que el (estándar) POSIXt tipo de la base de R que se puede tener en 'forma compacta' como un POSIXct (que es esencialmente un doble representa fracciones de segundo desde la época) o forma, siempre en POSIXlt (que contiene sub -elementos). Lo interesante es que la aritmética, etc. se definen en este - ver help(DateTimeClasses)

Ejemplo rápido:

R> now <- Sys.time() 
R> now 
[1] "2009-12-25 18:39:11 CST" 
R> as.numeric(now) 
[1] 1.262e+09 
R> now + 10 # adds 10 seconds 
[1] "2009-12-25 18:39:21 CST" 
R> as.POSIXlt(now) 
[1] "2009-12-25 18:39:11 CST" 
R> str(as.POSIXlt(now)) 
POSIXlt[1:9], format: "2009-12-25 18:39:11" 
R> unclass(as.POSIXlt(now)) 
$sec 
[1] 11.79 

$min 
[1] 39 

$hour 
[1] 18 

$mday 
[1] 25 

$mon 
[1] 11 

$year 
[1] 109 

$wday 
[1] 5 

$yday 
[1] 358 

$isdst 
[1] 0 

attr(,"tzone") 
[1] "America/Chicago" "CST"    "CDT"    
R> 

En cuanto a la lectura en ellos, ver help(strptime)

En cuanto a la diferencia, también muy fácil:

R> Jan1 <- strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S") 
R> difftime(now, Jan1, unit="week") 
Time difference of 51.25 weeks 
R> 

Por último, el zoo package es un contenedor extremadamente versátil y bien documentado para la matriz con fecha/tim correspondiente índices e.

+13

Gracias. Las personas que hicieron los nombres para las funciones R son crueles. Quiero decir, ¿cómo debes adivinar que POSIXlt tiene algo que ver con el tiempo? – Christian

+6

Pero 'help.search (" date time ")' habría descubierto funciones vecinas. –

+3

@DirkEddelbuettel sí, y eso es útil. De todos modos, eso no es excusa para mal nombre. Cuanto más legible sea el código sin necesidad de documentación, mejor. – nandinga

Cuestiones relacionadas