R: удаление последних элементов вектора

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

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

 skan21 сент. 2010 г., 09:29
спасибо То, что мне действительно нужно, немного сложнее. Мне нужно сместить ряд, удалив некоторые элементы и добавив другие с другой стороны, но когда я делаю c (rep (0,10), x [1: (length (x) -11)]), это уже не зоопарк. ура
 MERose29 дек. 2015 г., 00:23
@skan: Как насчет принятия ответа, чтобы пометить вопрос как решенный?

Ответы на вопрос(6)

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

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

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

x = x[1:(length(x) -101)]
 skan21 сент. 2010 г., 09:42
Со всеми вашими ответами я построил почти то, что мне нужно: coredata (zz2) <- c (rep (0,3), head (coredata (zz), - 3)) Теперь мне просто нужно использовать его в серии зоопарка с несколько столбцов, изменяя только один.

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

x <- head(x,-100)
> head(1:102,-100)
[1] 1 2
 Mark Rucker12 апр. 2017 г., 05:03
Стоит отметить, что есть такжеtail() который работает идентично, но наоборот.
 C8H10N4O202 дек. 2015 г., 22:57
Этот ответ должен быть принят. Его можно использовать, не зная заранее длину x, что полезно, если вы пытаетесь выборочно читать данные из файла. От?head: n: If negative, [return] all but the n last/first number of elements of x.
 JASC17 февр. 2019 г., 01:42
Также смысл очень понятен.

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

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

где вы должны обеспечитьN больше 100 и т. д.

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

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
 JASC27 дек. 2018 г., 06:44
Это хорошее решение с веским аргументом.
 yalei du01 мар. 2017 г., 16:29
не работает, если длинаx это 1
 Ken Williams09 дек. 2018 г., 17:44
@yaleidu было бы лучше использоватьx[seq_len(length(x)-1)], который работает в случае длины 1 тоже.

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

> x <- 1:10^5
> length(x)
[1] 100000
> length(x) <- 3
> x
[1] 1 2 3
 Crparedes03 дек. 2018 г., 09:13
Драгоценные! почти так же легко набрать, чемhead() но намного проще во всем остальном!

Ваш ответ на вопрос