私の質問は、2つのデータセットをマージするという問題と組み合わされた、「コンビーン」関数のようなものを構築するための迅速かつ効率的な方法です。私のデータは、おおよそ次のようになります。サブセットとコンビネーションを効率的に組み合わせる
DF <- data.frame(c(1, 1, 1, 2), c("A", "B", "C", "A"))
colnames(DF) <- c("ID", "Classification")
DF
ID Classification
1 1 A
2 1 B
3 1 C
4 2 A
M <- matrix(data=c(1, 2, 3, 2, 4, 5, 3, 5, 6), nrow=3, ncol=3)
colnames(M) <- c("A", "B", "C")
rownames(M) <- c("A", "B", "C")
M
A B C
A 1 4 7
B 2 5 8
C 3 6 9
私は最後にしたい結果は、この(またはまだClassification1
とClassification2
変数を含めずに、私は気にしない)である:だから
RESULT <- data.frame(c(1, 1, 1, 1, 1, 1, 2), c("A", "A", "A", "B", "B", "C", "A"),
c("A", "B", "C", "B", "C", "C", NA), c(1, 2, 3, 4, 5, 6, NA))
colnames(RESULT) <- c("ID", "Classification1", "Classification2", "Value")
RESULT
ID Classification1 Classification2 Value
1 1 A A 1
2 1 A B 2
3 1 A C 3
4 1 B B 4
5 1 B C 5
6 1 C C 6
7 2 A <NA> NA
本質的に私はRに何かを伝えたいと思います:ID
のそれぞれのユニークな値に対して、Classification
のすべての可能なバイナリの組み合わせを作成します。これらの可能な組み合わせのそれぞれについて、対応する値を参照してM
を返します。data.frame
ID
およびvalues
のそれぞれのリスト。
expand.grid
または最初の部分のための
combn
、その後、
melt
行列
M
に基づいて自分自身の関数を書く試みた
、およびClassification
変数に基づいてmerge
。それには、subset
、merge
、そしてrbind
という数多くのものがありました。私はlapply
を使ってみましたが、私はその作業をすることができません。私の気持ちは、data.table
でスマートな方法があるかもしれないということですが、私はその作業を行うこともできません。
ご協力いただきまして誠にありがとうございます。あなたが行列を操作する関数を生成することから始めることができ
ニルス
ありがとうございました。しかし、マージする前に組み合わせを制限したいので、あなたの例のようにすべてのマッチが作成されるわけではありません。 ID = 2の行にはClassificationが1つしかないので、1つの分類のバイナリ展開がないので、ここでNAを指定します。また、@thelatemailの答えで指摘されているように、私は単一の分類(AとBをマージ)ではなく、分類のペア(A-BとA-B)をマージしたいと思います。 –