Pregunta

Estoy tratando de leer la serie de tiempo de archivo CSV y guardarlos como xts a ser capaz de procesarlas con quantmod. El problema es que los valores numéricos no se analizan.

archivo CSV:

name;amount;datetime
test1;3;2010-09-23 19:00:00.057
test2;9;2010-09-23 19:00:00.073

código R:

library(xts)
ColClasses = c("character", "numeric", "character")
Data <- read.zoo("c:\\dat\\test2.csv", index.column = 3, sep = ";", header = TRUE, FUN = as.POSIXct, colClasses = ColClasses)
as.xts(Data)

Resultados:

                    name    amount
2010-09-23 19:00:00 "test1" "3"   
2010-09-23 19:00:00 "test2" "9"   

Véase la columna cantidad contiene datos de caracteres, pero se espera que sea numérico. ¿Qué hay de malo en mi código?

¿Fue útil?

Solución

La estructura de datos interna de ambos zoo y xts es matrix, por lo que no se pueden mezclar tipos de datos.


acabamos de leer en los datos con read.table:

Data <- read.table("file.csv", sep=";", header=TRUE, colClasses=ColClasses)

Me notar que sus datos tienen subseconds, por lo que puede estar interesado en xts::align.time. Este código se llevará a Data y crear un objeto con una columna para cada "name" por segundo.

NewData <- do.call( merge, lapply( split(Data,Data$name), function(x) {
  align.time( xts(x[,"amount"],as.POSIXct(x[,"datetime"])), n=1 )
}) )

Si desea crear objetos test1 y test2 en su entorno global, puede hacer algo como:

lapply( split(Data,Data$name), function(x) {
  assign(x[,"name"], xts(x[,"amount"],as.POSIXct(x[,"datetime"])),envir=.GlobalEnv)
})

Otros consejos

No se puede mezclar datos numéricos y el carácter de un objeto zoológico o XTS; Sin embargo, si la columna nombre no pretende ser series temporales de datos sino que está destinada a distinguir entre múltiples series de tiempo, uno para test1, uno para test2, etc, entonces se puede dividir en la columna 1, utilizando dividida = 1 para causar tales división como se muestra en el código siguiente. Asegúrese de ajustar los digits.secs o de lo contrario no verá la sub-segundos en la salida (a pesar de que estarán allí en cualquier caso):

options(digits.secs = 3)
z <- read.zoo("myfile.csv", sep = ";", split = 1, index = 3, header = TRUE, tz = "")
x <- as.xts(z)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top