2013-02-15 6 views
7

Dies kann redundant sein, aber ich konnte eine ähnliche Frage zu SO nicht finden.R Abkürzung zum Abrufen der letzten n Einträge in einem Vektor

Gibt es eine Verknüpfung zu bekommen, die letzten n Elemente/Einträge in einem Vektor oder Array ohne die Länge des Vektors in der Berechnung unter Verwendung von?

foo <- 1:23

> foo 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 

Lassen Sie sagen, man die letzten 7 Einheiten will ich diese umständlichen Syntax vermeiden wollen:

> foo[(length(foo)-6):length(foo)] 
[1] 17 18 19 20 21 22 23 

Python hat foo[-7:]. Gibt es etwas Ähnliches in R? Vielen Dank!

Antwort

13

Sie wollen die tail Funktion

foo <- 1:23 
tail(foo, 5) 
#[1] 19 20 21 22 23 
tail(foo, 7) 
#[1] 17 18 19 20 21 22 23 
x <- 1:3 
# If you ask for more than is currently in the vector it just 
# returns the vector itself. 
tail(x, 5) 
#[1] 1 2 3 

Zusammen mit head gibt es einfache Möglichkeiten, wie gut alles außer die letzten/ersten n Elemente eines Vektors zu greifen.

x <- 1:10 
# Grab everything except the first element 
tail(x, -1) 
#[1] 2 3 4 5 6 7 8 9 10 
# Grab everything except the last element 
head(x, -1) 
#[1] 1 2 3 4 5 6 7 8 9 
+5

Plus eins und wollte die netten negativen indexierenden Eigenschaften von 'tail' und' head' für zukünftige Suchende notieren. Du kannst sagen "Gib mir alle bis auf die letzten n Elemente/Reihen" wie: 'head (foo, -2)' –

+1

@TylerRinker Guter Punkt - das sind gute Infos und ich habe es der Antwort hinzugefügt. – Dason

3

Keine gute Idee, wenn Sie die ehrfürchtige Schwanz Funktion haben, aber hier ist eine Alternative:

n <- 3 
rev(rev(foo)[1:n]) 

ich mich für die unten Stimmen bereite mich darauf vor.

+0

+1 für die clevere Verwendung von 'rev'. Vermeidet auch die Verwendung der Länge (foo). Warum kann R nicht 'len' wie Python benutzen ?! Spart 50% Tipparbeit. – harkmug

+0

Ich mag die erste, aber die zweite war explizit, was sie in der ursprünglichen Frage vermeiden wollten. – Dason

+0

@Dason guten Punkt habe ich es entfernt, da das Plakat ausdrücklich ihre Verachtung für die Länge angibt. –