R: Conversión de trama de datos (factor de mezclado y numérico) para XTS en R

StackOverflow https://stackoverflow.com/questions/4470735

  •  11-10-2019
  •  | 
  •  

Pregunta

Al convertir una trama de datos con el factor de mezclado y columnas numéricas para un XTS, todos mis datos se convierte en cadenas. Esto no es un problema con los factores, pero es muy molesto con los valores numéricos. ¿Hay alguna solución?

Por ejemplo:

> x

          marketTimestamp price  id
1 2010-12-17 11:38:31.100 83.89 b-0
2 2010-12-17 11:38:31.100 83.88 b-1
3 2010-12-17 11:38:31.100 83.87 b-2
4 2010-12-17 11:38:31.300 83.91 o-0
5 2010-12-17 11:38:31.300 83.92 o-1
6 2010-12-17 11:38:31.300 83.93 o-2

> as.xts(x[,-1],as.POSIXct(x[,1]))

                    price   id   
2010-12-17 11:38:31 "83.89" "b-0"
2010-12-17 11:38:31 "83.88" "b-1"
2010-12-17 11:38:31 "83.87" "b-2"
2010-12-17 11:38:31 "83.91" "o-0"
2010-12-17 11:38:31 "83.92" "o-1"
2010-12-17 11:38:31 "83.93" "o-2"

Idealmente Quiero la primera columna permanezca numérico, mientras que el segundo se convierte en una cadena. Las necesidades de soluciones para automatizar por completo, ya que estoy trabajando con conjuntos de datos con un gran número de columnas, y no siempre pueden predecir cuáles serán los factores y los que van a ser numérico.

-

Editar:

he tratado de solucionar este problema mediante la definición de la función siguiente:

to.xts <- function(data) {

    timestamp <- as.POSIXct(data[,1])
    coredata <- data[,-1]

    headers <- names(coredata)
    data.type <- c()

    for (header in headers) {
        data.type[headers==header] <- class(coredata[[header]])
    }

    data.factor  <- xts(coredata[,data.type=="factor"],timestamp)
    data.numeric <- xts(coredata[,data.type=="numeric"],timestamp)

    data.xts <- cbind(data.factor,data.numeric)

}

pero cuando la fusión de los dos objetos XTS, los datos de cadena se convierte en AN:

> x
                    id    side 
2010-12-17 11:38:31 "b-0" "BID"
2010-12-17 11:38:31 "b-1" "BID"
2010-12-17 11:38:31 "b-2" "BID"
> y
                    price
2010-12-17 11:38:31 83.89
2010-12-17 11:38:31 83.88
2010-12-17 11:38:31 83.87
> merge(x,y)
                    id side price
2010-12-17 11:38:31 NA   NA 83.89
2010-12-17 11:38:31 NA   NA 83.88
2010-12-17 11:38:31 NA   NA 83.87
Warning message:
In merge.xts(x, y) : NAs introduced by coercion

¿Es un problema conocido con el paquete XTS, o estoy haciendo algo mal?

¿Fue útil?

Solución

No se puede hacer esto como XTS requiere una matriz numérica.

Otros consejos

Es una limitación de diseño. tener en cuenta que XTS o zoológico es básicamente una matriz más índice. no es un índice de trama de datos más.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top