1. ホーム
  2. r

[解決済み] Rのcombnを使用して、すべての可能な組み合わせの行列を作成します。

2022-02-15 21:38:11

質問

これは、私が取り組んでいる宿題の問題に関連しています。私はいくつかのベクトルを行列にするデータ操作を実行する必要があり、TAはcombn関数を使用することを提案しました。

# what I'm starting with
a = c(1, 2)
b = c(NA, 4, 5)
c = c(7, 8)

# what I need to get 
my_matrix
a    b    c
1   NA    7
1   NA    8
1    4    7 
1    4    8 
1    5    7 
1    5    8 
2   NA    7 
2   NA    8 
2    4    7 
2    4    8
2    5    7
2    5    8

my_matrix は、a, b, c の要素のすべての可能な組み合わせを列名 a, b, c とした行列です。combn() が何をしているかは理解できますが、上記の行列に変換する方法はよくわかりませんね。

よろしくお願いします。

解決方法は?

expand.grid のコメントで述べたように、より良い、より簡単な方法です。しかし、あなたは combn

#STEP 1: Get all combinations of elements of 'a', 'b', and 'c' taken 3 at a time
temp = t(combn(c(a, b, c), 3))

# STEP 2: In the first column, only keep values present in 'a'
#Repeat STEP 2 for second column with 'b', third column with 'c'
#Use setNames to rename the column names as you want
ans = setNames(data.frame(temp[temp[,1] %in% a & temp[,2] %in% b & temp[,3] %in% c,]),
                                                                  nm = c('a','b','c'))
ans
#   a  b c
#1  1 NA 7
#2  1 NA 8
#3  1  4 7
#4  1  4 8
#5  1  5 7
#6  1  5 8
#7  2 NA 7
#8  2 NA 8
#9  2  4 7
#10 2  4 8
#11 2  5 7
#12 2  5 8