2010-08-24 23 views
12

Ho un problema quando ho importare un file CSV con R:Leggi csv con date e numeri

esempio linee di importazione:

2010-07-27;91 
2010-07-26;93 
2010-07-23;88 

ho utilizzare l'istruzione:

data <- read.csv2(file="...", sep=";", dec=".", header=FALSE) 

quando provo ad aggregare questi dati con altri originati da analisi statistiche usando cbind, la data viene mostrata come numero intero perché è stata importata come fattore.

Se si tenta di visualizzarlo come una stringa utilizzando as.character, i dati numerici vengono trasformati in caratteri troppo in modo da essere inutilizzabili per le procedure statistiche.

risposta

7

Aggiungere as.is=TRUE alla chiamata read.csv.

9

Forse si desidera convertire i valori dei caratteri per i valori di tempo significativi. In tal caso, gli oggetti tempo POSIXt sono una buona scelta.

Dato il file di dati che avrei fatto qualcosa di simile.

data <- read.table(file="...", sep = ";", as.is = TRUE) 
data[,1] <- strptime(data[,1], "%Y-%m-%d") 

Cercare aiuto per ulteriori dettagli.

NOTA: Se avete intenzione di specificare tutte le proprietà del file basta usare read.table. L'unico scopo per tutte le altre versioni read.xxx è semplificare l'espressione perché i valori di default sono impostati. Qui hai usato read.csv2 perché di default è sep = ';'. Pertanto, non specificarlo di nuovo. Non dover specificare che è l'intera ragione per cui esiste il comando. Personalmente, uso solo read.table perché non riesco mai a ricordare i nomi/i valori di default di tutte le varianti. Nel tuo caso è anche la chiamata più breve perché soddisfa la tua intestazione e dec defaults.

+1

quando ho eseguito la seconda linea, ottengo un messaggio di errore come 'fornito 9 variabili per sostituire 1 variabili'. Tuttavia, quando ho avvolgo 'strptime' in' as.POSIXct (...) ', vale a dire fare' as.POSIXct (strptime (dati [, 1], "% Y-% m-% d") 'sembra –

+0

Se data [, 1] è un vettore di stringhe di caratteri del formato c ("2010-07-23", ...) ciò che ho scritto funziona. Che cosa significa "sembra funzionare" comunque? come se tu stessi solo convertendo il risultato POSIXlt predefinito e hai qualche altra funzione non menzionata qui usando un valore POSIXlt. Va bene, è solo un risultato diverso. Ciò non significa che ciò che è lì non funziona. POSIXlt e POSIXct sono di classe POSIXt (che è quello che ho citato) – John

+1

Questo è esattamente ciò che * 'read.csv (... colClasses ...)' * è per! Vedi la risposta di Marek. Fare la conversione in lettura con colClasses è meglio di questa risposta perché non spreca molta memoria temporanea. (Basta fare * 'gc (reset = TRUE)' * in seguito.) Inoltre, è molto più leggibile. – smci

25

Uso colClasses argomento:

data <- read.csv2(file="...", sep=";", dec=".", header=FALSE, 
    colClasses=c("Date",NA)) 

NA significa "procedere come default"

Dopo l'importazione è possibile convertire factor a Date da

data[[1]] <- as.Date(data[[1]])