R: Conversion de trame de données (facteur mixte et numérique) pour XTS par R

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

  •  11-10-2019
  •  | 
  •  

Question

Lors de la conversion d'une trame de données avec un facteur mixte et les colonnes numériques à un XTS, toutes mes données est converti en chaînes. Ce n'est pas un problème avec les facteurs, mais il est extrêmement ennuyeux avec les valeurs numériques. Y at-il une solution de contournement?

Par exemple:

> 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"

Idéalement je veux la première colonne à rester numérique, tandis que le second est converti en une chaîne. Les besoins de solution pour être entièrement automatisées, comme je travaille avec des ensembles de données avec un grand nombre de colonnes, et je ne peux pas toujours prédire quels sont ceux qui seront le facteur et qui sera numérique.

-

Edit:

J'ai essayé de contourner ce problème en définissant la fonction suivante:

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)

}

mais lors de la fusion des deux objets XTS, les données de chaîne est convertie en NAs:

> 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

Est-ce un problème connu avec le paquet XTS, ou que je fais quelque chose de mal?

Était-ce utile?

La solution

Vous ne pouvez pas faire cela comme XTS nécessite une matrice numérique.

Autres conseils

Il est une limitation par la conception. garder à l'esprit que XTS ou zoo est essentiellement une matrice plus index. pas un indice positif de dataframe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top