Добавить последовательность между каждой парой значений числового вектора - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть числовой вектор, который я хотел бы расширить последовательностью из трех дополнительных чисел между каждыми двумя значениями этого вектора.

Рассмотрим следующий пример:

# Example vector
set.seed(123)
x <- round(runif(5, 0, 100))
x
### 29 79 41  88 94

Я хочу вставить 3 новых числа между каждым из этих пяти значений.Числа должны быть последовательностью длиной 3 между каждой парой значений.

Выходные данные должны выглядеть следующим образом:

# Desired output
c(seq(29, 79, length.out = 5),
  seq(79, 41, length.out = 5)[- 1],
  seq(41, 88, length.out = 5)[- 1],
  seq(88, 94, length.out = 5)[- 1])
# 29 42 54 66 79 70 60 50 41 53 64 76 88 90 91 92 94

Добавленная последовательность между 29 и 79 - 42, 54, 66;добавленная последовательность между 79 и 41 составляет 70, 60, 50;и так далее ...

Как я могу сделать такую ​​операцию в автоматическом режиме?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Необычное решение:

set.seed(123)
x <- round(runif(5, 0, 100))
x

c(x[1], unlist(lapply(X = 1:(length(x)-1), function(i) seq(x[i], x[i+1], length.out = 5)[-1])))
[1] 29.00 41.50 54.00 66.50 79.00 69.50 60.00 50.50 41.00 52.75 64.50 76.25 88.00 89.50 91.00 92.50 94.00

На самом деле ваше семя генерирует эти значения: 29 79 41 88 94

0 голосов
/ 06 февраля 2019

Один из вариантов - Map, чтобы получить последовательность соседних чисел, удалив элемент last и элемент first, удалив первый элемент из вывода list, unlist и добавив первый элементвектор

c(x[1], unlist(lapply(Map(seq, x[-length(x)], x[-1],
           MoreArgs = list(length.out = 5)), `[`, -1)))
#[1] 29.00 41.50 54.00 66.50 79.00 69.50 60.00 50.50 41.00 
#[11] 52.75 64.50 76.25 88.00 89.50 91.00 92.50 94.00
...