Pregunta

Me gustaría aumentar un objeto de zoológico con una variable que podría usar para probar los cambios de mes. Estoy seguro de que hay formas más generales de hacer esto. Sugerencias sería genial, pero me gustaría entender por qué falla este enfoque simple. Me sentiría mejor si entendiera lo que me estoy perdiendo aquí ;-)

por ejemplo, para un objeto zoológico

library(zoo)
tz <- structure(c(7L, 7L, 1L, 6L, 0L, 9L, 0L, 1L, 6L, 0L, 3L, 3L, 5L, 
0L, 8L, 2L, 0L, 3L, 2L, 5L, 2L, 3L, 4L, 7L, 8L, 9L, 0L, 1L, 4L, 
5L, 6L, 7L, 8L, 2L, 3L, 4L, 5L, 8L, 9L, 0L), .Dim = c(20L, 2L
), .Dimnames = list(NULL, c("x", "y")), index = structure(c(13880, 
13881, 13913, 13916, 13946, 13947, 13948, 13980, 13983, 13984, 
13985, 14016, 14048, 14082, 14083, 14115, 14147, 14180, 14212, 
14243), class = "Date"), class = "zoo")

Agregue una variable de año/mes usando AS.Yearmon () parece bastante fácil. Si estuviera en un marco de datos, esto produciría una variable de carácter fino, pero en el zoológico se produce la tragedia de zoológico si olvida envolver as.numeric ()

tz$yrmo <- as.numeric(as.yearmon(index(tstz)))
> head(tz)
           x y     yrmo
2008-01-02 7 2 2008.000
2008-01-03 7 3 2008.000
2008-02-04 1 4 2008.083
2008-02-07 6 7 2008.083
2008-03-08 0 8 2008.167
2008-03-09 9 9 2008.167

Esto se ve muy bien y puedo comparar los elementos de datos con éxito

(tz $ x [6]! = tz $ y [6])
2008-03-09
FALSO

Pero, ¿por qué obtengo este resultado cuando comparo la variable año/mes?

> (tz$yrmo[2] != tz$yrmo[1])
Data:
logical(0)

Index:
character(0)

¿Y por qué las pruebas de Yearmon o los elementos de datos con idéntico () fallan de esta manera? (Ambos deberían ser ciertos)

> identical(tz$yrmo[2] , tz$yrmo[1])
[1] FALSE
> identical(tz$x[2] , tz$x[1])
[1] FALSE

¿Solo estoy jugando con Fire en el uso de Yearmon () que crea una clase de índice en zoológico? ¿Debería cambiar a algo como 'Convertir una fecha en un número mensual de Dirk Eddelbuettel? Número de meses entre dos fechas

¿Fue útil?

Solución

P1: La pista en la salida que tiene datos y una sección de índice es que estos son objetos de zoológico. Por lo tanto, tienen atributos de índice que también se comparan y no son iguales. Si quisiera comparar los valores, entonces podría acceder al coredata ()::

> (coredata(tz$yrmo[2]) != coredata(tz$yrmo[1]))
[1] FALSE
> coredata(tz$yrmo[2])
[1] 2008
> coredata(tz$yrmo[1])
[1] 2008

Q2: identical Verifica más que solo los valores numéricos. También determina la igualdad de todos los atributos.

> attributes(tz$yrmo[2])
$index
[1] "2008-01-03"

$class
[1] "zoo"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top