Генерация всех возможных комбинаций элементов вектора в R - PullRequest
0 голосов
/ 05 марта 2020

Имея вектор,

v1 <- LETTERS[1:4]

Я хотел бы получить data-frame из двух столбцов типа:

A B 

A C

A D

B A

B C

B D

D A

D B

D C

Я пробовал с combn, external и expand.grid но я не получил то, что хотел.

Ответы [ 4 ]

0 голосов
/ 05 марта 2020

Все решения в порядке. И с помощью одной дополнительной строки команды вы можете отфильтровать строку, содержащую AA и BB, а также C C и D D.

Используя пример Matt,

final_df <- final_df%>% filter (v1! = v2)

Спасибо!

0 голосов
/ 05 марта 2020
outer(v1, v1, paste, sep="")
     [,1] [,2] [,3] [,4]
[1,] "AA" "AB" "AC" "AD"
[2,] "BA" "BB" "BC" "BD"
[3,] "CA" "CB" "CC" "CD"
[4,] "DA" "DB" "DC" "DD"
0 голосов
/ 05 марта 2020

Если вы хотите, чтобы все возможные комбинации AA - DD в двух столбцах, вы можете использовать функцию tidyr crossing.

Это мой подход:

library(tidyverse)

v1 <- LETTERS[1:4]
v2 <- v1

final_df <- crossing(v1, v2)
0 голосов
/ 05 марта 2020
do.call(rbind, lapply(seq_along(v1), function(i) data.frame(x = v1[i], y = v1[-i])))

ИЛИ

do.call(rbind, lapply(seq_along(v1), function(i){
    do.call(rbind, lapply(seq_along(v1)[-i], function(j){
        c(v1[i], v1[j])
    }))
}))

ИЛИ

d = expand.grid(replicate(2, v1, simplify = FALSE))
d[d$Var1 != d$Var2,]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...