web-dev-qa-db-fra.com

R: suppression des derniers éléments d'un vecteur

Comment supprimer les 100 derniers éléments d'une série Zoo?

Je connais la notation du nom [-element] mais je n'arrive pas à faire soustraire une section complète

42
skan

J'aime utiliser head pour cela car c'est plus facile à taper. Les autres méthodes s'exécutent probablement plus vite cependant ... mais je suis paresseux et mon ordinateur ne l'est pas. ;-)

x <- head(x,-100)
> head(1:102,-100)
[1] 1 2
80
Joshua Ulrich

Je parie length<- est le moyen le plus efficace de découper un vecteur:

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

En fait, il existe un moyen beaucoup plus rapide:

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

Exposition de code:

> 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
9
Qinsi

Utilisez simplement les indices numériques, c.-à-d.

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

où vous devez vous assurer que N est supérieur à 100, etc.

7
Dirk Eddelbuettel

si vous êtes un paquebot

x = x[1:(length(x) -101)]
5
Arthur Rizzo

Un autre doublure par souci d'exhaustivité:

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