Forum

Nome Utente:
Password:
Riconoscimi automaticamente
 Tutti i Forum
 MolecularLab
 Bioinformatica
 [R] table headers
 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
I seguenti utenti stanno leggendo questo Forum Qui c'è:

Aggiungi Tag Aggiungi i tag

Quanto è utile/interessante questa discussione:

Autore Discussione  

MB
Nuovo Arrivato



58 Messaggi

Inserito il - 13 novembre 2010 : 21:10:35  Mostra Profilo  Visita l'Homepage di MB Invia a MB un Messaggio Privato  Rispondi Quotando
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

pinolo



156 Messaggi

Inserito il - 13 novembre 2010 : 23:25:57  Mostra Profilo  Visita l'Homepage di Glubus Invia a Glubus un Messaggio Privato  Rispondi Quotando
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

Torna all'inizio della Pagina

MB
Nuovo Arrivato



58 Messaggi

Inserito il - 14 novembre 2010 : 15:08:43  Mostra Profilo  Visita l'Homepage di MB Invia a MB un Messaggio Privato  Rispondi Quotando
Grazie, immaginavo mi fosse sfuggita qualche opzione apposita di read.table..

Le sapete sempre tutte!!

Grazie Globus
Torna all'inizio della Pagina

dallolio_gm
Moderatore


Prov.: Bo!
Città: Barcelona/Bologna


2445 Messaggi

Inserito il - 15 novembre 2010 : 13:52:19  Mostra Profilo  Visita l'Homepage di dallolio_gm  Clicca per vedere l'indirizzo MSN di dallolio_gm Invia a dallolio_gm un Messaggio Privato  Rispondi Quotando
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! :-)
Torna all'inizio della Pagina

MB
Nuovo Arrivato



58 Messaggi

Inserito il - 15 novembre 2010 : 15:01:54  Mostra Profilo  Visita l'Homepage di MB Invia a MB un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

chick80
Moderatore

DNA

Città: Edinburgh


11491 Messaggi

Inserito il - 15 novembre 2010 : 15:59:11  Mostra Profilo  Visita l'Homepage di chick80 Invia a chick80 un Messaggio Privato  Rispondi Quotando
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+!)
Torna all'inizio della Pagina

MB
Nuovo Arrivato



58 Messaggi

Inserito il - 15 novembre 2010 : 16:30:35  Mostra Profilo  Visita l'Homepage di MB Invia a MB un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina
  Discussione  

Quanto è utile/interessante questa discussione:

 Nuova Discussione  Nuovo Sondaggio Nuovo Sondaggio
 Rispondi Aggiungi ai Preferiti Aggiungi ai Preferiti
Cerca nelle discussioni
Vai a:
MolecularLab.it © 2003-18 MolecularLab.it Torna all'inizio della Pagina