2010-03-03 20 views
37

Supponiamo di avere una lista o un frame di dati in R, e vorrei ottenere l'indice di riga, come faccio? Cioè, mi piacerebbe sapere quante righe contiene una determinata matrice.Come ottenere il numero indice di riga in R?

+1

La domanda è ancora molto poco chiara. – reinierpost

+1

Penso che sia perché si tratta di due domande: la seconda frase è ciò che @BenBolker ha risposto 'nrow (x)' (cioè dando le * dimensioni * del frame dati). La prima frase riguarda l'ottenimento di numeri di riga, a cui Shane ha risposto (e nullo1 migliorato) 'as.integer (rownames (x))' –

risposta

10

Non è chiaro cosa stai provando a fare esattamente.

fare riferimento a una riga in una trama di dati di utilizzare df[row,]

Per ottenere la prima posizione in un vettore di qualcosa utilizzo match(item,vector), dove il vettore potrebbe essere una delle colonne della trama di dati, ad esempio df$cname se la colonna il nome è cname.

Edit:

di combinare questi si può scrivere:

df[match(item,df$cname),]

Nota che la partita ti dà il primo elemento della lista, quindi se non siete alla ricerca di un numero di riferimento unico , potresti voler considerare qualcos'altro.

+1

Questa è una buona risposta a una domanda diversa da quella che credo l'alter ego di @lebesgue sta chiedendo. Se si digita 'head (df)' ci sono titoli su tutte le colonne tranne l'ID della riga. Quindi penso che @lebesgue stia cercando una funzione che permetta l'accesso all'ID di riga (la funzione 'row'). – isomorphismes

56

Sto interpretando la tua domanda per ottenere numeri di riga.

  • Puoi provare as.numeric(rownames(df)) se non hai impostato i nomi dei giocatori. Altrimenti usa una sequenza di 1:nrow(df).
  • La funzione which() converte un indice di riga TRUE/FALSE in numeri di riga.
+3

Questo è quello che faccio anch'io, poiché i nomi di riga DF, anche se sono numerici, non corrispondono necessariamente all'indice riga: 'row (cars [34:50,]) [, 1]; as.integer (rownames (auto [34:50,])) '. Perchè usi 'as.numeric()' qui? Non avrebbe più senso usare 'as.integer()'? – naught101

2

Se ho capito la tua domanda, si vuole solo essere in grado di accedere agli elementi in un frame di dati (o lista) per riga:

x = matrix(ceiling(9*runif(20)), nrow=5 ) 
colnames(x) = c("col1", "col2", "col3", "col4") 
df = data.frame(x)  # create a small data frame 

df[1,]     # get the first row 
df[3,]     # get the third row 
df[nrow(df),]   # get the last row 

lf = as.list(df)   

lf[[1]]     # get first row 
lf[[3]]     # get third row 

ecc

8

Vedi row in ?base::row. Questo fornisce gli indici di riga per qualsiasi oggetto simile alla matrice.

Problemi correlati