2010-09-20 16 views
37

Wie kann ich die letzten 100 Elemente einer Zoo-Serie entfernen?R: Entfernen der letzten Elemente eines Vektors

Ich kenne den Namen [-elementigen] Notation aber ich kann es keine vollständigen Abschnitt subtrahieren erhalten arbeiten

+0

danke Was ich wirklich brauche, ist ein bisschen komplizierter. Ich muss die Reihe verschieben, einige Elemente entfernen und andere von der anderen Seite hinzufügen, aber wenn ich c (rep (0,10), x [1: (Länge (x) -11)]) es ist kein Zoo irgendwelcher Mehr. Prost – skan

+1

@skan: Was ist mit einer Antwort zu akzeptieren, um die Frage als gelöst zu markieren? – MERose

Antwort

7

einfach die numerische Indizes verwenden, dh

N <- nrow(X) 
X <- X[1:(N-100-1),] 

, wo Sie benötigen sollen gewährleisten N etc größer 100

5

ist, wenn Sie ein Motto

x = x[1:(length(x) -101)] 
sind
+0

Mit all Ihren Antworten habe ich fast das gebaut, was ich brauche coredata (zz2) <- c (rep (0,3), Kopf (coredata (zz), - 3)) Jetzt muss ich es nur noch verwenden eine Zoo-Serie mit mehreren Spalten, die nur eine ändert. – skan

71

Ich mag head dafür verwenden, weil es einfacher zu tippen ist. Die anderen Methoden laufen wahrscheinlich schneller, aber ich bin faul und mein Computer nicht. ;-)

x <- head(x,-100) 
> head(1:102,-100) 
[1] 1 2 
+3

Diese Antwort sollte akzeptiert werden. Es kann verwendet werden, ohne die Länge von x im Voraus zu kennen, was vorteilhaft ist, wenn Sie versuchen, Daten selektiv aus einer Datei zu lesen. Von '? Head':' n: Wenn negativ, [return] alle außer der n letzten/ersten Anzahl von Elementen von x.' – C8H10N4O2

+1

Bemerkenswert ist auch 'tail()', das identisch funktioniert, aber umgekehrt. –

8

ich length<- wette der effizienteste Weg ist, einen Vektor zu trimmen:

> x <- 1:10^5 
> length(x) 
[1] 100000 
> length(x) <- 3 
> x 
[1] 1 2 3 
2

Ein weiterer Einzeiler aus Gründen der Vollständigkeit halber:

x <- lag(x, 100)[-1:-100] 
8

Eigentlich gibt es ein viel schneller Weg:

y <- x[1:(length(x)-1)] 

Code zeigen:

> microbenchmark(y <- head(x, -1), y <- x[-length(x)],y <- x[1:(length(x)-1)], times=10000) 
Unit: microseconds 
         expr min  lq  mean median  uq  max 
      y <- head(x, -1) 71.399 76.4090 85.97572 78.9230 84.2775 2795.076 
     y <- x[-length(x)] 53.623 55.5585 65.15008 56.5680 61.1585 2523.141 
y <- x[1:(length(x) - 1)] 25.722 28.2925 36.43029 29.1855 30.4010 2410.975 
+0

funktioniert nicht, wenn die Länge von 'x' 1 ist –

Verwandte Themen