2010-09-20 8 views
37

Come rimuovere gli ultimi 100 elementi di una serie di zoo?R: rimozione degli ultimi elementi di un vettore

So che il nome [-element] notazione ma non riesco a farlo funzionare a sottrarre una sezione completa

+0

grazie Quello di cui ho davvero bisogno è un po 'più complicato. Ho bisogno di spostare la serie, rimuovere alcuni elementi e aggiungerne altri dall'altra parte ma quando faccio c (rep (0,10), x [1: (length (x) -11)]) non è zoo qualsiasi Di Più. evviva – skan

+1

@skan: Che ne dici di accettare una risposta per contrassegnare la domanda come risolta? – MERose

risposta

7

Basta usare gli indici numerici, cioè

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

dove dovrebbe essere necessario Assicuriamo N è più grande di 100 ecc

5

se sei un uno di linea

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

Con tutte le tue risposte ho costruito quasi quello che mi serve coredata (zz2) <- c (rep (0,3), head (coredata (zz), - 3)) Ora ho solo bisogno di usarlo all'interno una serie di zoo con diverse colonne, modificandone una sola. – skan

71

Mi piace usare head per questo perché è più facile da digitare. Gli altri metodi probabilmente si eseguono più velocemente ... ma sono pigro e il mio computer no. ;-)

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

Questa risposta dovrebbe essere accettata. Può essere utilizzato senza conoscere la lunghezza di x in anticipo, il che è vantaggioso se si sta tentando di leggere selettivamente i dati da un file. Da '? Head':' n: se negativo, [restituisce] tutti tranne l'ultimo/primo numero di elementi di x' – C8H10N4O2

+1

Vale la pena notare che esiste anche 'tail()' che funziona in modo identico ma al contrario. –

8

Scommetto length<- è il modo più efficace per tagliare un vettore:

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

Un altro uno-liner per ragioni di completezza:

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

In realtà, c'è molto più veloce:

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

Codice spettacolo:

> 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

non funziona se la lunghezza di 'x' è 1 –