как сделать систематическую c перестановку в R? - PullRequest
2 голосов
/ 16 марта 2020

У меня есть вектор, включающий 9 наблюдений и набор для 3 обработок. Мне нужно сделать систематическую перестановку c, а не 9 !. Это 9! / (2! 3! 4!) = 1260. сначала 9 выберите 2, затем 7 выберите 3, остальные obs будут в лечении 3. Я уже написал код для 2 частей, но я не могу понять, как перечислить все возможные результаты. Так как есть некоторые замечания, повторяются. перестановка не совсем верна. Мне нужно сначала назначить идентификатор для каждого наблюдения. У меня есть проблема с тем, как сначала назначить идентификатор и идентификатор перестановки, а затем вернуть реальные наблюдения. список мой код R. есть некоторые ошибки. Мне нужна помощь, чтобы завершить эту программу. Спасибо!

for (k in 1260) {
  allperm<-c(A,B,C)
  A <- combn(complete, 2)
  for (i in 1:36){
    complete_B <- complete[!(complete %in% A[,i])]
    B <- combn(complete_B, 3)
    for (j in 1:35){
      C <- complete_B[!(complete_B %in% c(B[,j], A[,i]))]     
    }
  }
}

1 Ответ

1 голос
/ 16 марта 2020

вот базовое решение R для получения всех перестановок allPerms, а также разбиений A, B и C

v <- 1:9
allPerms <- lapply(sapply(combn(v,2,simplify = FALSE), 
                          function(p) combn(v[-p],3,FUN = function(k) c(p,k),simplify = FALSE)),
                   function(k) c(k,v[-k]))

A <- lapply(allPerms, `[`,1:2)
B <- lapply(allPerms, `[`,3:5)
C <- lapply(allPerms, `[`,6:9)

, таких что

> head(allPerms)
[[1]]
[1] 1 2 3 4 5 6 7 8 9

[[2]]
[1] 1 2 3 4 6 5 7 8 9

[[3]]
[1] 1 2 3 4 7 5 6 8 9

[[4]]
[1] 1 2 3 4 8 5 6 7 9

[[5]]
[1] 1 2 3 4 9 5 6 7 8

[[6]]
[1] 1 2 3 5 6 4 7 8 9

> head(A)
[[1]]
[1] 1 2

[[2]]
[1] 1 2

[[3]]
[1] 1 2

[[4]]
[1] 1 2

[[5]]
[1] 1 2

[[6]]
[1] 1 2

> head(B)
[[1]]
[1] 3 4 5

[[2]]
[1] 3 4 6

[[3]]
[1] 3 4 7

[[4]]
[1] 3 4 8

[[5]]
[1] 3 4 9

[[6]]
[1] 3 5 6

> head(C)
[[1]]
[1] 6 7 8 9

[[2]]
[1] 5 7 8 9

[[3]]
[1] 5 6 8 9

[[4]]
[1] 5 6 7 9

[[5]]
[1] 5 6 7 8

[[6]]
[1] 4 7 8 9

Если вы хотите выводить данные в формате матрицы, вы можете попробовать код ниже

v <- 1:9
allPerms <- sapply(sapply(combn(v,2,simplify = FALSE), 
                          function(p) combn(v[-p],3,FUN = function(k) c(p,k),simplify = FALSE)),
                   function(k) c(k,v[-k]))

A <- allPerms[1:2,]
B <- allPerms[3:5,]
C <- allPerms[6:9,]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...