2015-04-15 4 views
2

У меня есть много векторов, таких как: c(28, 30, 50, 55, 99, 102), и я хотел бы получить новый вектор, в котором элементы, отличающиеся менее чем 10 от одного до другого, усредняются. В этом случае я хотел бы получить c(29, 52.5, 100.5).R: Средние близлежащие элементы в векторе

+0

Вы заботитесь о заказе от не? Например, для вектора типа 'c (10, 50, 80, 22, 89, 98, 102)' вы хотите рассматривать '10' и' 22' как две группы или одну группу? –

+1

Уважаемый Дэвид, мои векторы уже заказаны ... так что 10 и 22 должны принадлежать к одной группе – Ruggero

ответ

1

Другой способ

vec <- c(28, 30, 50, 55, 99, 102) 
indx <- cumsum(c(0, diff(vec)) > 10) 
tapply(vec, indx, mean) 
# 0  1  2 
# 29.0 52.5 100.5 
+0

Мне нужно запустить, но вы можете проверить, есть ли 'c (10, 50, 80, 22, 89, 98, 102) 'это работает. (или, может быть, я ошибаюсь). – akrun

+0

@akrun см. Ответ от OP –

+1

Ваше решение в любом случае. Шахта не будет работать в определенных случаях. – akrun

Смежные вопросы