2012-09-12 12 views
20

Ho questo codice di esempio per creare un nuovo frame di dati 'new_data' dal frame di dati esistente 'my_data'.Segno di dollaro prima di una variabile

new_data = NULL 
n = 10 #this number correspond to the number of rows in my_data 
conditions = c("Bas_A", "Bas_T", "Oper_A", "Oper_T") # the vector characters correspond to the target column names in my_data 
for (cond in conditions){ 
    for (i in 1:n){ 
     new_data <- rbind(new_data, c(cond, my_data$cond[i])) 
    } 
} 

Il problema è che my_data$cond (dove cond è una variabile, e non il nome di colonna) non è accettato.

Come posso chiamare una colonna di un frame di dati utilizzando, dopo il simbolo del dollaro, un valore variabile?

+8

'$' non è veramente destinata a essere utilizzata programatically. È pensato per essere una comodità per l'uso interattivo. Prova invece a utilizzare "mydata [i, cond]". Tuttavia, osservando il tuo codice penso che potresti trarre beneficio dalla funzione 'reshape', o dal pacchetto' reshape2' ... – James

+0

Nota che 'my_data' è un' dati.frame' e 'new_data' è una' matrice '. – GSee

+3

Vedere 'fortune (312)'. –

risposta

32

Per accedere a una colonna, uso:

my_data[ , cond] 

o

my_data[[cond]] 

Il i esima riga può accedere con:

my_data[i, ] 

Combinare sia per ottenere il valore desiderato :

my_data[i, cond] 

o

my_data[[cond]][i] 
+0

non possiamo usare 'c $ column', dove' c' è una matrice? Stavo ricevendo l'errore "Errore nell'operatore c $ col1: $ non valido per i vettori atomici" ... – Mahesha999

+0

@ Mahesha999 Non puoi usare '$' con le matrici. –

3

Credo che bisogna get().

Ad esempio,
get(x,list), dove list è la lista e x è la variabile (può essere una stringa), che è uguale list$x.

Ma in get(x,list), x può essere una variabile durante l'utilizzo $, x non può essere una variabile.

0

$ funziona su colonne, non su singoli oggetti colonna. È una forma di vettorizzazione. Il codice

corrections$BookDate = as.Date(corrections$BookDate, format = "%m/%d/%Y") 

converte il contenuto della colonna della tabella BookDatecorrections da stringhe a Date oggetti. Lo esegue in un'unica operazione, assegnazione.

effettuare le seguenti operazioni e sarà risolvere il tuo problema:

new_data <- rbind(new_data, c(cond, my_data$cond)) 
0

ti capiterà spesso di voler selezionare un'intera colonna, vale a dire una variabile specifica da un frame di dati. Se si desidera selezionare tutti gli elementi del diametro di variabili, per esempio, entrambi questi farà il trucco:

dataframe_name[,column_position] 
dataframe_name[,"column_name"] 

Tuttavia, v'è una scorciatoia. Se le colonne hanno nomi, è possibile utilizzare il segno $:

dataframe_name$column_name 
Problemi correlati