2010-09-20 18 views
37

¿Cómo puedo eliminar los últimos 100 elementos de una serie de zoológico?R: eliminación de los últimos elementos de un vector

sé el nombre [-elemento] notación pero no lo puede operar a restar una sección completa

+0

gracias Lo que realmente necesito es un poco más complicado. Necesito cambiar la serie, eliminar algunos elementos y agregar otra desde el otro lado pero cuando lo hago c (rep (0,10), x [1: (longitud (x) -11)]) no es zoológico Más. ovaciones – skan

+1

@skan: ¿Qué hay de aceptar una respuesta para marcar la pregunta como resuelta? – MERose

Respuesta

7

Sólo tiene que utilizar los índices numéricos, es decir

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

donde debe necesitar asegurar N es mayor de 100, etc

5

si usted es un chiste

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

Con todas sus respuestas he construido casi lo que necesito coredata (zz2) <- c (rep (0,3), head (coredata (zz), - 3)) Ahora solo necesito usarlo dentro una serie de zoológico con varias columnas, modificando solo una. – skan

71

Me gusta usar head para esto porque es más fácil escribir. Los otros métodos probablemente se ejecuten más rápido ... pero soy flojo y mi computadora no. ;-)

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

Esta respuesta debe ser aceptada. Puede usarse sin conocer la longitud de x por adelantado, lo cual es una ventaja si está intentando leer datos de un archivo de manera selectiva. De '? Head':' n: Si es negativo, [devolver] todos menos el núltimo/primer número de elementos de x. – C8H10N4O2

+1

. Vale la pena señalar que también hay 'tail()' que funciona de forma idéntica pero a la inversa. –

8

apuesto length<- es la forma más eficiente para recortar un vector:

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

Otro de una sola línea en aras de la exhaustividad:

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

En realidad, hay una forma mucho más rápida:

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

Código 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

no funciona si la longitud de 'x' es 1 –

Cuestiones relacionadas