2010-09-20 2 views
37

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

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

+0

спасибо Что мне действительно нужно, это немного сложнее. Мне нужно сдвинуть серию, удалить некоторые элементы и добавить другую с другой стороны , но когда я делаю c (rep (0,10), x [1: (длина (x) -11)]), это не зоопарк Больше. cheers – skan

+1

@skan: Как насчет того, чтобы принять ответ, чтобы отметить вопрос как разрешенный? – MERose

ответ

7

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

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

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

5

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

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

Со всеми вашими ответами я построил почти то, что мне нужно coredata (zz2) <- c (rep (0,3), head (coredata (zz), - 3)) Теперь мне просто нужно использовать его внутри серия зоопарков с несколькими колонками, изменяющая только одну. – skan

71

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

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

Этот ответ должен быть принят. Его можно использовать, не зная длину x заранее, что выгодно, если вы пытаетесь выборочно читать данные из файла. Из '' head': 'n: если отрицательный, [return] все, кроме n последнего/первого числа элементов x.' – C8H10N4O2

+1

Стоит отметить, что существует также' tail() ', который работает одинаково, но наоборот. –

8

Держу пари length<- является наиболее эффективным способом отделки вектор:

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

Еще один вкладыш для полноты картины:

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

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

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 
+0

не работает, если длина 'x' равна 1 –