Saltar al contenido

R convertir entre objeto de zoológico y marco de datos, ¿resultados inconsistentes para diferentes números de columnas?

Solución:

Si no desea eliminar las dimensiones, utilice drop=FALSE:

R> (z1 <- read.zoo(df[,1:2], drop=FALSE))
           Lepisma saccharina
2012-01-01                  4
2012-01-02                  5
2012-01-03                  9
2012-01-04                  7

Puedes hacer algo como write.zoo si desea incluir el índice del zoológico como una columna en su data.frame:

zoo.to.data.frame <- function(x, index.name="Date") {
  stopifnot(is.zoo(x))
  xn <- if(is.null(dim(x))) deparse(substitute(x)) else colnames(x)
  setNames(data.frame(index(x), x, row.names=NULL), c(index.name,xn))
}

ACTUALIZAR:

Después de intentar editar su pregunta por brevedad, pensé en una manera fácil de crear df2b según sus especificaciones (esto también funcionará para z1 si no baja las dimensiones):

R> (df2b <- data.frame(Date=time(z2), z2, check.names=FALSE, row.names=NULL))
        Date Lepisma saccharina Thermobia domestica
1 2012-01-01                  4                   2
2 2012-01-02                  5                   6
3 2012-01-03                  9                   0
4 2012-01-04                  7                  11

Para convertir de marco de datos a uso de zoológico read.zoo:

library(zoo)
z <- read.zoo(df)

También tenga en cuenta la disponibilidad del drop y otros argumentos en ?read.zoo .

y para convertir de zoológico a marco de datos, incluido el índice, utilice fortify.zoo:

fortify.zoo(z, name = "Date")

(Si se carga ggplot2, puede usar fortify.)

Como se menciona en los comentarios debajo de la pregunta, la pregunta, así como algunas de las otras respuestas, están desactualizadas o tienen algunos malentendidos importantes. Le sugiero que revise https://cran.r-project.org/web/packages/zoo/vignettes/zoo-design.pdf, que analiza la filosofía de diseño del zoológico que incluye la coherencia con R en sí. Ciertamente, zoo sería mucho más difícil de usar si tuviera que recordar un conjunto de valores predeterminados para R y otro para zoo.

Hay una nueva solución simple para esto usando el timetk paquete. Convertirá varios formatos de series de tiempo, incluyendo xts y zoo, para tibbles. Simplemente envuélvalo as.data.frame para obtener un marco de datos.

timetk::tk_tbl(zoo::read.zoo(df))
# A tibble: 4 x 3
  index      `Lepisma saccharina` `Thermobia domestica`
  <date>                    <dbl>                 <dbl>
1 2012-01-01                    4                     2
2 2012-01-02                    5                     6
3 2012-01-03                    9                     0
4 2012-01-04                    7                    11
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *