переставить вектор с определенным шаблоном пропуска в r

#r #permutation

#r #перестановка

Вопрос:

У меня есть результат перестановки, как показано ниже;

 abc <- gtools::permutations(4,3,repeats.allowed = T)
 

Я пытаюсь изменить этот ответ так, чтобы вектор abc[,1] оставался таким, какой он есть, но векторным abc[,2] и abc[,3] должен быть следующим;

abc[,2] должен быть переставлен в 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4

abc[,3] должен быть переставлен в 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4 1 2 1 2 1 2 1 2 3 4 3 4 3 4 3 4

Ответ №1:

Это очень вручную, поэтому не уверен, что вы ищете более автоматизированный подход к сортировке:

 abc[,2] <- rep(rep(1:4, each = 2), length.out = nrow(abc))
abc[,3] <- rep(c(rep(1:2, 2), rep(3:4, 2)), length.out = nrow(abc))
 

дает:

       [,1] [,2] [,3]
 [1,]    1    1    1
 [2,]    1    1    2
 [3,]    1    2    1
 [4,]    1    2    2
 [5,]    1    3    3
 [6,]    1    3    4
 [7,]    1    4    3
 [8,]    1    4    4
 [9,]    1    1    1
[10,]    1    1    2
[11,]    1    2    1
[12,]    1    2    2
[13,]    1    3    3
[14,]    1    3    4
[15,]    1    4    3
[16,]    1    4    4
[17,]    2    1    1
[18,]    2    1    2
[19,]    2    2    1
[20,]    2    2    2
[21,]    2    3    3
[22,]    2    3    4
[23,]    2    4    3
[24,]    2    4    4
[25,]    2    1    1
[26,]    2    1    2
[27,]    2    2    1
[28,]    2    2    2
[29,]    2    3    3
[30,]    2    3    4
[31,]    2    4    3
[32,]    2    4    4
[33,]    3    1    1
[34,]    3    1    2
[35,]    3    2    1
[36,]    3    2    2
[37,]    3    3    3
[38,]    3    3    4
[39,]    3    4    3
[40,]    3    4    4
[41,]    3    1    1
[42,]    3    1    2
[43,]    3    2    1
[44,]    3    2    2
[45,]    3    3    3
[46,]    3    3    4
[47,]    3    4    3
[48,]    3    4    4
[49,]    4    1    1
[50,]    4    1    2
[51,]    4    2    1
[52,]    4    2    2
[53,]    4    3    3
[54,]    4    3    4
[55,]    4    4    3
[56,]    4    4    4
[57,]    4    1    1
[58,]    4    1    2
[59,]    4    2    1
[60,]    4    2    2
[61,]    4    3    3
[62,]    4    3    4
[63,]    4    4    3
[64,]    4    4    4
 

Комментарии:

1. вы правы, я думал об автоматическом способе взглянуть на это. Потому что с тем, что я делаю, я хотел бы расширить идею до чего-то подобного abc <- gtools::permutations(9,3,repeats.allowed = T) , для чего abc[,2] <- rep(rep(1:9, each = 3), length.out = nrow(abc)) должен быть другой столбец abc[,3] <- rep(c(rep(1:3, 3), rep(4:6, 3), rep(7:9, 3)), length.out = nrow(abc)) . Есть идеи о том, как я мог бы все автоматизировать?

2. Схема расширения с каждым новым элементом понятна, если вы посмотрите на нее. Самое сложное — расширить его по столбцам, потому что тогда у вас также не было бы abc [, 4] и т. Д.

3. Чего именно вы хотите достичь? Зачем вам нужен шаблон сортировки? Возможно, есть совершенно другой способ получить желаемый результат.

4. с тем, что я делаю, единственное, что меняется в n in gtools::permutations(n=9,r=3,repeats.allowed = T) , но r всегда будет 3. Другими словами n , может быть 4 или 9 или что-то еще, но r всегда будет 3. Поэтому abc[,4] невозможно. Все, что мне нужно, это вид расположения точно так, как вы его выводили выше. Я думал о expand.grid() том, но это не сортировало бы его соответствующим образом. В качестве примера, если бы я отсортировал expand.grid(c(1,2,3,4),c(1,2,3,4),c(1,2,3,4)) , чтобы получить ваши результаты abc выше, это сработало бы

5. Вопрос был в том, зачем вам нужен этот шаблон перестановки? Какой анализ вы хотите выполнить и почему важно иметь этот конкретный шаблон сортировки? Я скептически отношусь к тому, что это необходимо, еще и потому, что при выполнении перестановок у вас будет каждая комбинация два раза, и я думаю, вы не хотите запускать свои вещи несколько раз для каждого шаблона.