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 tibble
s. 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