2013-01-08 16 views
5

Supponiamo di aver letto un file csv in un frame di dati denominato "d". Desidero stampare le ultime 2 righe di questo frame di dati. Ho provato il seguito, ma sta stampando tutto il contenuto a partire da n-1. Qualcuno può aiutarmi a capire questo comportamento per favore?Estrazione del sottoinsieme del frame di dati in R

> n<-nrow(d) 
> n 
[1] 153 
> subset(d[n:n-1,]) 
+0

'5: 5-1 [1] 4' ... –

risposta

6

Si può semplicemente utilizzare coda

tail(d, 2) 

Darà le ultime due righe.

2

Questo sta lavorando per me ...

d <- matrix(1:10,nrow=5) 
d 
    [,1] [,2] 
[1,] 1 6 
[2,] 2 7 
[3,] 3 8 
[4,] 4 9 
[5,] 5 10 

d <- as.data.frame(d) 
d 
    V1 V2 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 

n <- nrow(d) 
> n 
[1] 5 
d[n:(n-1),] ## Specifying the number of the row inside the brackets. 
V1 V2 
5 5 10 
4 4 9 

d[n:n-1,] ## without brackets it will do 5:5 -1 = 4, so printing only the fourth row 
    V1 V2 
4 4 9 
+0

Non c'è bisogno di sottoinsieme qui. Tu stai usando [. – mnel

+0

@mnel yeah rite .. :) ha modificato la risposta. – user1021713

6

@mnel è corretto che l'utilizzo di tail() sarebbe probabilmente il più semplice, tuttavia penso che la tua confusione abbia a che fare con il sottoinsieme() e l'indicizzazione funzionano in generale. Nel tuo esempio essere consapevoli di come indice le matrici e le data.frames dal

d[(n:n - 1), ] 

non è lo stesso di

d[n:(n-1), ] 

quindi controllate la differenza con cautela, poiché l'ordine delle operazioni sono importanti per capire. La funzione sottoinsieme() anche gli indici sulla base di un indicatore di logica e ha la forma

subset(object, subset = logicalvector) 

dove il vettore logica dà le righe che si desidera estrarre. Vedi? Sottoinsieme per maggiori dettagli.

1

userei: tail(d, 2) o d[(n-1):n, ] Speranza che aiuta

Problemi correlati