Pergunta

Eu importei um arquivo CSV com muitas colunas e seções de dados.

v <- read.csv2("200109.csv", header=TRUE, sep=",", skip="6", na.strings=c(""))

O layout do arquivo é algo assim:

Dataset1
time, data, .....
0       0
0       <NA>
0       0

Dataset2
time, data, .....
00:00   0
0       <NA>
0       0

(Os cabeçalhos dos diferentes conjuntos de dados são exatamente os mesmos.

Agora, posso plotar o primeiro conjunto de dados com:

plot(as.numeric(as.character(v$Calls.served.by.agent[1:30])), type="l")

Estou curioso se houver uma maneira melhor de:

  1. Obtenha todos os números lidos como números, sem precisar converter.

  2. Aborde os diferentes conjuntos de dados no arquivo, de alguma maneira significativa.

Quaisquer dicas seriam bem vindas. Obrigada.


Atualização de status:

Ainda não encontrei uma boa solução em R, mas comecei a escrever um script em Lua para separar cada série do tempo em um arquivo separado. Estou deixando isso aberto por enquanto, porque estou curioso para saber como R lidará com todos esses arquivos. Vou obter 8 arquivos por dia.

Foi útil?

Solução

O que eu pessoalmente faria é fazer um script em algum idioma de script para separar os diferentes conjuntos de dados antes que o arquivo seja lido em r e, possivelmente, faça algumas das conversões de dados necessárias também.

Se você quiser fazer a divisão em r, olhe para cima readLines e scanread.csv2 é muito alto e é para ler um único quadro de dados. Você pode escrever os diferentes conjuntos de dados em diferentes arquivos, ou se for ambicioso, cozinhe objetos R semelhantes a arquivos que são utilizados com read.csv2 e leia as partes corretas do grande arquivo subjacente.

Depois de lidar com a separação dos conjuntos de dados em diferentes arquivos, use read.csv2 naqueles (ou qualquer coisa que read.table A variante é a melhor-se essas não são guias, mas campos de largura fixa, veja read.fwf). Se <NA> indica "não disponível" em seu arquivo, certifique -se de especificá -lo como parte de na.strings. Se você não faz isso, R acha que você tem dados não numéricos nesse campo, mas com o direito na.strings, você se converte automaticamente em números. Parece que um de seus campos pode incluir cupons de hora como 00:00, então você precisa usar colClasses e especifique uma classe para a qual seu formato de carimbo de hora pode ser convertido. Se o embutido Date A classe não funciona, apenas defina o seu próprio timestamp classe e um as.timestamp função que faz a conversão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top