Quanto è utile/interessante questa discussione:
Autore |
Discussione |
|
MB
Nuovo Arrivato
58 Messaggi |
Inserito il - 13 novembre 2010 : 21:10:35
|
Ciao a tutti,
fin'ora non è mai stato un problema ma ultimamente ho avuto a che fare con dati da importare con read.table in cui i nomi delle colonne (headers) potevano iniziare con numero oppure contenere caratteri non consentiti, es (fittizio):
2D Z-1
1 2
2 3
3 4
Con read.table e header=TRUE come sappiamo diventano:
X2D Z.1
1 2
2 3
3 4
Voi sapete qualche trucchetto per farli rimanere tali e quali all'originale? GRAZIE
|
|
|
Glubus
Utente Junior
156 Messaggi |
Inserito il - 13 novembre 2010 : 23:25:57
|
il consiglio è assecondare il comportamento prudente di R in ogni caso puoi settare l'argomento "check.names" di "read.table" a FALSE con <- textConnection(" 2D Z-1 1 2 2 3 3 4" )
read.table(con, h=T, check.names=F)
# ed avrai conservato i nomi delle variabili nel formato originale
2D Z-1 1 1 2 2 2 3 3 3 4
Stefano
Citazione: Messaggio inserito da MB
Ciao a tutti,
fin'ora non è mai stato un problema ma ultimamente ho avuto a che fare con dati da importare con read.table in cui i nomi delle colonne (headers) potevano iniziare con numero oppure contenere caratteri non consentiti, es (fittizio):
2D Z-1
1 2
2 3
3 4
Con read.table e header=TRUE come sappiamo diventano:
X2D Z.1
1 2
2 3
3 4
Voi sapete qualche trucchetto per farli rimanere tali e quali all'originale? GRAZIE
|
|
|
MB
Nuovo Arrivato
58 Messaggi |
Inserito il - 14 novembre 2010 : 15:08:43
|
Grazie, immaginavo mi fosse sfuggita qualche opzione apposita di read.table..
Le sapete sempre tutte!!
Grazie Globus |
|
|
dallolio_gm
Moderatore
Prov.: Bo!
Città: Barcelona/Bologna
2445 Messaggi |
Inserito il - 15 novembre 2010 : 13:52:19
|
sono d'accordo con Globus, ti conviene lasciare stare il comportamento di default di R. In ogni caso, puoi sempre cambiare i nomi degli headers successivamente:
names(mytables) <- c("2D", "Z-1") |
Il mio blog di bioinformatics (inglese): BioinfoBlog Sono un po' lento a rispondere, posso tardare anche qualche giorno... ma abbiate fede! :-) |
|
|
MB
Nuovo Arrivato
58 Messaggi |
Inserito il - 15 novembre 2010 : 15:01:54
|
questa soluzione l'avevo scartata perchè ho bisogno che il mio script riconosca tutte le volte i diversi headers in modo automatico..
prima del consiglio di Globus avevo pensato di mettere header=FALSE in modo tale che mi venissero messi nella prima riga. In questo modo i nomi non vengono cambiati. L'idea era poi di cambiare gli header (con il comando da te ricordato) con i nomi contenuti appunto nella prima riga. Avevo incontrato dei problemi a questo punto, infatti provando con una cosa del tipo qui sotto non mi andava perchè non trovavo il modo di fargli riconoscere la riga come vettore
names(mytables) <- Dataset[,1] ##Ora non ricordo come avevo provato a fare
Insomma poi la soluzione di Globus mi sembrava la più immediata, che rischi pensate possano derivare dal mancato check dei nomi?
Grazie, ciao |
|
|
chick80
Moderatore
Città: Edinburgh
11491 Messaggi |
Inserito il - 15 novembre 2010 : 15:59:11
|
Se hai una colonna che si chiama "z-1" il "-" può portarti dei problemi.
Il problema è che R è molto "elastico" nella maniera in cui gestisce i nomi.
Ad es. avendo
df <- data.frame(c(1,2,3), c(4,5,6))
names(df) <- c("Nome", "z-1")
> df
Nome z-1
1 1 4
2 2 5
3 3 6
Ora, se scrivi df$Nome ottieni:
> df$Nome
[1] 1 2 3
Ma questo funziona anche se scrivi:
> df$N
[1] 1 2 3
Questo perchè R prende df e vede che l'unico membro che inizia per N è Nome, e quindi usa quello
E' lo stesso principio per cui è equivalente scrivere:
read.table(filename, header=TRUE)
read.table(filename, head=TRUE)
read.table(filename, h=TRUE)
A questo punto, arriviamo alla colonna z-1 (che, ricorda è 4,5,6)
> df
Nome z-1
1 1 4
2 2 5
3 3 6
> df$z-1
[1] 3 4 5 <---- !!!!!!!!!!!
Cosa succede quando scrivi df$z-1? R vede df$z seguito da un - che per lui non dovrebbe normalmente essere in un nome di colonna. Immagina quindi che tu voglia intendere df$z-1. Il comando diventa quindi df$z-1 - 1 e ottieni 3,4,5 invece di 4,5,6!
Curiosamente (o magari no) se avessi una terza colonna chiamata z allora df$z-1 funzionerebbe! |
Sei un nuovo arrivato? Leggi il regolamento del forum e presentati qui
My photo portfolio (now on G+!) |
|
|
MB
Nuovo Arrivato
58 Messaggi |
Inserito il - 15 novembre 2010 : 16:30:35
|
Vero, effettivamente non avevo pensato a questa eventualità, nel mio script non dovrebbe creare problemi, ma in futuro lo terrò a mente.
Grazie anche di questo.
MB |
|
|
|
Discussione |
|
|
|
Quanto è utile/interessante questa discussione:
MolecularLab.it |
© 2003-18 MolecularLab.it |
|
|
|