Pergunta

Estou tentando ler as séries temporais do arquivo CSV e salvá -las como XTs para poder processá -los com o QuantMod. O problema é que os valores numéricos não são analisados.

Arquivo 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)

Resultado:

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

Consulte a coluna do valor contém dados de caracteres, mas espera -se numérico. O que há de errado com meu código?

Foi útil?

Solução

A estrutura de dados interna de ambos zoo e xts é matrix, para que você não possa misturar tipos de dados.


Basta ler os dados com read.table:

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

Percebo que seus dados têm subsegundos, então você pode estar interessado em xts::align.time. Este código vai levar Data e crie um objeto com uma coluna para cada "name" por segundos.

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

Se você quiser criar objetos test1 e test2 No seu ambiente global, você pode fazer algo como:

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

Outras dicas

Você não pode misturar dados numéricos e de caracteres em um objeto Zoo ou XTS; No entanto, se a coluna de nome não se destina a ser dados de séries temporais, mas pretende distinguir entre várias séries temporais, uma para test1, uma para test2, etc. Então você pode se dividir na coluna 1 usando divisão = 1 para causar essa divisão conforme mostrado no código a seguir. Certifique-se de definir os dígitos.

options(digits.secs = 3)
z <- read.zoo("myfile.csv", sep = ";", split = 1, index = 3, header = TRUE, tz = "")
x <- as.xts(z)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top