2010-09-20 16 views
37

Jak mogę usunąć ostatnie 100 elementów z serii Zoo?R: usuwanie ostatnich elementów wektora

wiem nazwę [-elementowe] notacji ale nie mogę go uruchomić odjąć pełnym przekroju

+0

dzięki To, czego naprawdę potrzebuję, jest nieco bardziej skomplikowane. Potrzebuję przenieść serię, usuwając niektóre elementy i dodając inne z drugiej strony , ale kiedy robię c (rep (0,10), x [1: (długość (x) -11)]) to nie jest zoo jeszcze. Pozdrawiam: – skan

+1

@skan: Co powiesz o zaakceptowaniu odpowiedzi, aby oznaczyć pytanie jako rozwiązane? – MERose

Odpowiedz

7

Wystarczy użyć wskaźników liczbowych, czyli

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

gdzie powinna trzeba zapewnienie N jest większy 100 itp

5

jeśli jesteś jeden wykładziny rurowej

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

Z twoimi odpowiedziami zbudowałem prawie to, czego potrzebuję coredata (zz2) <- c (rep (0,3), głowa (coredata (zz), - 3)) Teraz po prostu potrzebuję użyć tego wewnątrz seria zoo z kilkoma kolumnami, modyfikująca tylko jedną. – skan

71

Dla tego lubię używać head, ponieważ łatwiej jest pisać. Inne metody prawdopodobnie działają szybciej ... ale jestem leniwy, a mój komputer nie. ;-)

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

Ta odpowiedź powinna zostać przyjęta. Może być używany bez znajomości długości x z góry, co jest korzystne, jeśli próbujesz selektywnie odczytać dane z pliku. Z '? Head':' n: Jeśli jest ujemny, [return] wszystkie oprócz n ostatniej/pierwszej liczby elementów x # – C8H10N4O2

+1

Warto zauważyć, że istnieje również 'tail()', który działa identycznie, ale w odwrotnej kolejności. –

8

Założę length<- jest najbardziej skutecznym sposobem przyciąć Vector:

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

Another One-liner dla kompletności wywodu:

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

Faktycznie, istnieje o wiele szybciej:

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

Code show:

> 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

nie działa, jeśli długość 'x' wynosi 1 –