Как повторить индексы вектора на основе значений этого же вектора? - PullRequest
1 голос
/ 04 мая 2020

Учитывая случайный целочисленный вектор ниже:

z <- c(3, 2, 4, 2, 1)

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

[1] 1 1 1 2 2 3 3 3 3 4 4 5

Я предпочитаю не использовать для l oop, а вместо этого использовать функцию из семейства apply.

Ответы [ 2 ]

3 голосов
/ 04 мая 2020

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

rep(seq(z), z)
# [1] 1 1 1 2 2 3 3 3 3 4 4 5
0 голосов
/ 04 мая 2020

Начиная со всех индексов вектора z. Они задаются следующим образом:

1:length(z)

Затем эти элементы следует повторить. Количество повторений этих чисел определяется значениями z. Это можно сделать с помощью комбинации функций lapply или sapply и функции rep:

unlist(lapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
[1] 1 1 1 2 2 3 3 3 3 4 4 5

unlist(sapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
[1] 1 1 1 2 2 3 3 3 3 4 4 5

Обе альтернативы дают одинаковый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...