R: удаление последних элементов вектора - PullRequest
42 голосов
/ 20 сентября 2010

Как я могу удалить последние 100 элементов серии зоопарка?

Я знаю нотацию имени [-element], но не могу заставить ее вычесть полный раздел

Ответы [ 6 ]

80 голосов
/ 20 сентября 2010

Мне нравится использовать head для этого, потому что его легче набирать.Другие методы, вероятно, выполняются быстрее ... но я ленив, а мой компьютер - нет.; -)

x <- head(x,-100)
> head(1:102,-100)
[1] 1 2
11 голосов
/ 04 мая 2011

Бьюсь об заклад, length<- - самый эффективный способ обрезать вектор:

> x <- 1:10^5
> length(x)
[1] 100000
> length(x) <- 3
> x
[1] 1 2 3
9 голосов
/ 08 июня 2016

На самом деле, есть гораздо более быстрый способ:

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

Кодовое представление:

> 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
7 голосов
/ 20 сентября 2010

Просто используйте числовые индексы, например

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

, где вам нужно убедиться, что N больше 100 и т. Д.

5 голосов
/ 20 сентября 2010

если вы один лайнер

x = x[1:(length(x) -101)]
3 голосов
/ 06 октября 2015

Еще один однострочник для полноты:

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