R: эффективный способ распространения векторов - PullRequest
0 голосов
/ 26 мая 2018

Существует ли эффективный способ программирования для решения следующей задачи?

Представьте себе следующий вектор:

A<-[a,b,c...k]

И мы хотели бы распространить его следующим образом: Давайте начнем с, например,n = 2

B<-[a,a,b,b,c...,k,k]

А теперь n = 4 или любое большее число 1

C<-[a,a,a,a,b,...,k,k,k,k]

Решить это с помощью циклов кажется довольно простым, но есть ли какая-либо функция или операция на основе вектораЯ пропустил / мог использовать?Лучшим решением для меня было бы решение «Tidyverse» (для его использования в трубе).

(Сложно провести исследование этой задачи, так как я новичок в R и не правильно формулируюпоиск. Любая помощь будет полезна.)

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Можно использовать rep с аргументом times = 2 или 4, а затем sort результат.Другой вариант - использовать mapply, а затем c оператор.

 c(mapply(rep, 2 ,A)) # OR sort(rep(A, times = 2))
 #[1] "a" "a" "b" "b" "c" "c" "d" "d" "e" "e" "f" "f" "g" "g" "h" "h" "i" "i" "j" "j"
 #[21] "k" "k"

 c(mapply(rep,A, 4))  #OR sort(rep(A, times = 2))
 #[1] "a" "a" "a" "a" "b" "b" "b" "b" "c" "c" "c" "c" "d" "d" "d" "d" "e" "e" "e" "e"
 #[21] "f" "f" "f" "f" "g" "g" "g" "g" "h" "h" "h" "h" "i" "i" "i" "i" "j" "j" "j" "j"
 #[41] "k" "k" "k" "k"
0 голосов
/ 26 мая 2018

Let

A <- letters[1:11]
A
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"

Если вы используете функцию rep с аргументом each, вы получите то, что хотите:

rep(A, each=2)
 [1] "a" "a" "b" "b" "c" "c" "d" "d" "e" "e" "f" "f" "g" "g" "h" "h" "i" "i" "j"
[20] "j" "k" "k"

rep(A, each=3)
[1] "a" "a" "a" "b" "b" "b" "c" "c" "c" "d" "d" "d" "e" "e" "e" "f" "f" "f" "g"
[20] "g" "g" "h" "h" "h" "i" "i" "i" "j" "j" "j" "k" "k" "k"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...