2013-01-08 20 views
5

Załóżmy, że odczytałem plik csv do ramki danych o nazwie "d". Chcę wydrukować ostatnie 2 wiersze tej ramki danych. Próbowałem poniżej, ale drukuje całą zawartość zaczynając od n-1. Czy ktoś może mi pomóc zrozumieć to zachowanie?Wyodrębnianie podzbioru ramki danych w R

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

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

Odpowiedz

6

można po prostu użyć ogon

tail(d, 2) 

dadzą dwa ostatnie wiersze.

2

To działa dla mnie ...

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

Nie potrzeba podzbioru tutaj. Ty używasz [. – mnel

+0

@mnel yeah rite .. :) edytował odpowiedź. – user1021713

6

@mek jest poprawny, że używanie tail() prawdopodobnie byłoby najłatwiejsze, ale myślę, że twoje zamieszanie ma związek z tym, jak ogólnie działa podzbiór() i indeksowanie. W przykładzie mieć świadomość, w jaki sposób macierze indeksowe i data.frames od

d[(n:n - 1), ] 

nie jest taka sama jak

d[n:(n-1), ] 

więc sprawdzić różnicę ostrożnie, gdyż kolejność operacji są ważne do zrozumienia. Funkcja również indeksy podzbiór() na podstawie wskaźnika logiczny i ma postać

subset(object, subset = logicalvector) 

gdzie logicznym wektor daje wiersze, które chcesz wyodrębnić. Zobacz "podzbiór", aby uzyskać więcej szczegółów.

1

użyłbym: tail(d, 2) lub d[(n-1):n, ] Nadzieja pomaga

Powiązane problemy