2011-11-02 24 views
8

Ho un frame di dati chiamato data.df con varie colonne diciamo col1, col2, col3 .... col15. Il frame di dati non ha un attributo di classe specifico ma qualsiasi attributo potrebbe essere potenzialmente utilizzato come variabile di classe. Vorrei usare una chiamata target variabile R che indica il numero di colonna di essere trattati come classe come segue:passando una stringa come nome colonna del frame di dati

target<-data.df$col3 

e quindi utilizzare quel campo (target) come input per diversi studenti come PART e J48 (dalla confezione RWeka):

part<-PART(target~.,data=data.df,control=Weka_control(M=200,R=FALSE)) 
j48<-J48(target~.,data=data.df,control=Weka_control(M=200,R=FALSE)) 

l'idea è quella di essere in grado di cambiare 'target' solo una volta, all'inizio del mio codice R. Come si può fare?

+0

Se quello che vuoi fare è semplicemente chiamare 'col3' invece di' data.df $ col3' puoi fare 'attach (data.df)'. Ma poi, dovresti fare attenzione a usare 'detach()' quando hai finito con i tuoi dati. E se usi più di un dataframe in una volta, potrebbe essere confuso e soggetto a errori se hai nomi di variabili ripetuti. –

+0

Antoine, ho letto che usare attach() non è una buona pratica. Puoi fornire un esempio con "dentro". Ho letto su di esso ma non ha molto senso alla mia attuale conoscenza di R –

+0

Grazie, ecco cosa ho fatto. –

risposta

6

Se si chiede di utilizzare references in R, è impossibile.

Tuttavia, se si chiede di ottenere una colonna per nome non esplicitamente dato, questo è possibile con [ operatore, in questo modo:

theNameOfColumnIwantToGetSummaryOf<-"col3" 
summary(data.df[,theNameOfColumnIwantToGetSummaryOf]) 

... o così:

myIndexOfTheColumnIwantToGetSummaryOf<-3 
summary(data.df[,sprintf("col%d",myIndexOfTheColumnIwantToGetSummaryOf)]) 
+0

Che dire di più colonne? Sono consapevole che si può fare ciò che si è fatto con 'df [, colName]', ma come si può mescolare/abbinare numeri e nomi.Esempio: 'df [, c (1,2,4)]' dove col 4 ha nome "colName". Come si potrebbe fare 'df [, c (1,2," colName ")]'? Questo sarebbe utile in un ciclo che sto cercando di scrivere. – Hendy

+0

@Hendy Non è possibile combinare nomi e numeri; tuttavia è possibile associare i risultati di due pedici ('cbind (df [, c (1,2)], df [, c (" colName ")])') o convertire i nomi in numeri con 'match' (come' match (c ("colName", "colName2"), names (df)) 'e mescola il risultato con indici numerici – mbq

+0

@Hendy Comunque, ho la strana sensazione che tu stia provando troppo a fare ciò che vuoi in questo modo, perché non chiederai una Q sull'intero ciclo? – mbq

9

A volte riesco a ottenere molto utilizzando le stringhe per fare riferimento alle colonne. Funziona in questo modo:

> df <- data.frame(numbers=seq(5)) 
> df 
    numbers 
1  1 
2  2 
3  3 
4  4 
5  5 
> df$numbers 
[1] 1 2 3 4 5 
> df[['numbers']] 
[1] 1 2 3 4 5 

si può quindi avere una variabile target essere il nome della colonna desiderata come una stringa. Non so RWeka, ma molte librerie come ggplot possono prendere i riferimenti di stringa per le colonne (ad esempio il parametro aes_string anziché aes).

Problemi correlati