2013-07-18 7 views
12

Come faccio a riferimento il numero di riga di un'osservazione? Ad esempio, se hai un data.frame chiamato "dati" e vuoi creare una variabile data$rownumber uguale al numero di riga di ogni osservazione, come faresti senza usare un ciclo?Referencing numero di riga R

risposta

19

queste sono presenti di default come rownames quando si crea un data.frame.

R> df = data.frame('a' = rnorm(10), 'b' = runif(10), 'c' = letters[1:10]) 
R> df 
      a   b c 
1 0.3336944 0.39746731 a 
2 -0.2334404 0.12242856 b 
3 1.4886706 0.07984085 c 
4 -1.4853724 0.83163342 d 
5 0.7291344 0.10981827 e 
6 0.1786753 0.47401690 f 
7 -0.9173701 0.73992239 g 
8 0.7805941 0.91925413 h 
9 0.2469860 0.87979229 i 
10 1.2810961 0.53289335 j 

e li si può accedere tramite il comando rownames.

R> rownames(df) 
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" 

se avete bisogno di loro come i numeri, semplicemente costringere a numerico con l'aggiunta di as.numeric, come in as.numeric(rownames(df)).

Non è necessario aggiungere, come se si sa cosa si sta cercando (diciamo oggetto df$c == 'i', è possibile utilizzare il comando which:

R> which(df$c =='i') 
[1] 9 

o se non si conosce la colonna

R> which(df == 'i', arr.ind=T) 
    row col 
[1,] 9 3 

si può accedere all'elemento utilizzando df[9, 'c'], o df$c[9].

Se si vuole aggiungere li si potrebbe usare 012.319., anche se questo può essere meno robusto di df$rownumber <- 1:nrow(df) in quanto vi sono casi in cui potrebbe essere assegnato a rownames in modo che non siano più i numeri di indice predefiniti (il cui comando continuerà a restituire i numeri di indice anche se si assegna a rownames).

1

Questo è probabilmente il modo più semplice:

data$rownumber = 1:dim(data)[1] 

E 'probabilmente la pena notare che, se si desidera selezionare una riga dal suo indice di riga, si può fare questo con la notazione semplice staffa

data[3,] 

vs. 

data[data$rownumber==3,] 

Quindi non sono davvero sicuro di cosa questa nuova colonna compia.

+3

È possibile utilizzare 'nrow (data)' invece di 'dim (data) [1]'. –

+2

I nomi dei personaggi sono caratteri non numerici. Ciò potrebbe portare a confusione. – Roland

+0

@Roland Buon punto, la rimozione di questa soluzione alternativa. –

6

Semplicemente:

data$rownumber = 1:nrow(Data) 
+0

Non riesco a pensare a un momento in cui sarebbe comunque utile. Soprattutto data la funzione 'which' –

+1

È utile se hai bisogno di un indice di ordinamento. – Roland

+0

Questo ha senso. –