私は、それぞれが少なくとも1つの組織サンプル、すなわち血液、心臓、肝臓などに寄与する様々な科目を持つデータフレームを持っていますが、複数の組織の31個のユニークな組織があり、1つの対象から収集された組織のペアを示す31 x 31マトリックスを作成したい。行と列の名前が組織の名前である場合、対角線は組織標本が収集された被験者の総数を示し、オフ対角線は両方を与えた被験者の数を含む(すなわち、被験者は心臓と肺のサンプルを与えていたが、心臓の行/列と肺の列/行の交差点は1だけ増加する)。R - キーと更新値によってデータフレームに欠けているペアを追加する
これまでは、発見されたそれぞれのユニークなペアと、両方の組織タイプに寄与した被験者の数を含むデータフレームcounts
にデータ(plyr
を使用)を取得できました。 SMTS1
とSMTS2
一致Count
の値は、これが設定されている方法、その組織
> head(counts, n = 32L)
SMTS1 SMTS2 Count
1 Adipose Tissue Adipose Tissue 439
2 Adipose Tissue Adrenal Gland 137
3 Adipose Tissue Bladder 11
4 Adipose Tissue Blood 423
5 Adipose Tissue Blood Vessel 368
6 Adipose Tissue Brain 146
7 Adipose Tissue Breast 190
8 Adipose Tissue Cervix Uteri 8
9 Adipose Tissue Colon 248
10 Adipose Tissue Esophagus 341
11 Adipose Tissue Fallopian Tube 6
12 Adipose Tissue Heart 266
13 Adipose Tissue Kidney 33
14 Adipose Tissue Liver 119
15 Adipose Tissue Lung 285
16 Adipose Tissue Muscle 380
17 Adipose Tissue Nerve 290
18 Adipose Tissue Ovary 99
19 Adipose Tissue Pancreas 174
20 Adipose Tissue Pituitary 102
21 Adipose Tissue Prostate 105
22 Adipose Tissue Salivary Gland 64
23 Adipose Tissue Skin 423
24 Adipose Tissue Small Intestine 97
25 Adipose Tissue Spleen 110
26 Adipose Tissue Stomach 182
27 Adipose Tissue Testis 168
28 Adipose Tissue Thyroid 290
29 Adipose Tissue Uterus 81
30 Adipose Tissue Vagina 86
31 Adrenal Gland Adipose Tissue 137
32 Adrenal Gland Adrenal Gland 159
... [823 Additional Rows]
のサンプルの総数を示し、31個の組織の各々は、counts$SMTS1
中に存在し、そしてcounts$SMTS2
は、組織のすべてを含みますペアが存在します。脂肪組織には30項目のみがあり、脂肪組織では見つからない組織タイプが1つあることを示しています。
私がしたいことは、SMTS1
のそれぞれのユニークな値が31の可能な組織のそれぞれとペアになるようにすることです。示されている場合、例えば、脂肪組織は30対しかなく、1対が存在しないことを示す。この場合、そのペアはBone Marrowです。私が望む何を、そして、二つの追加列ペアが存在しないことを示す0
値を与える
SMTS1 SMTS2 Count
1 Adipose Tissue Bone Marrow 0
2 Bone Marrow Adipose Tissue 0
を作成する、ことを認識すると、私のcounts
データフレーム用です。そこから、私は961の数値を持っていなければなりません。最終的に31 x 31マトリックスのエントリになります。ここで
私は
# Vector of 31 Tissues
tissues <- names(sampleTypes)
names(tissues) <- c("SMTS2")
# Replicate 31 times, one for each unique tissue in SMTS1
rep.tissues <- rep(tissues, 31)
# Make data frame column for merge
rep.df <- as.data.frame(t(rep.tissues)
names(rep.df) <- "SMTS2"
# Merge
match <- merge(counts, rep.df, by = "SMTS2", all.x = TRUE)
を試してみましたが、何であるしかし、このための出力があるため、重複の大きさであると、それらを削除し、私は、元counts
と同一のデータフレームが残っています。さらに、これは、作成された新しい行ごとにの値を0
で埋めることは何もしません。
TL; DR作成された行ごとにペアのない値をすべて作成し、第3列を0
で更新する必要があります。これらは、どの組織が同じ被験者から集められたかを示す31×31行列を記入するために使用されます。
'tidyr :: spread'がない場合にはゼロを置く使用することができますか? –
@RichardTelford私はこれを見て、それは私の 'counts'データフレームを取り、基本的には私が望むマトリックスに変えたように見えますが、これはすばらしいでしょう。これが欠けているキーペアをどのように処理するのか知っていますか? – cnolte
かなり正確な 'tidyr :: complete'はここで動作し、' dput'カウントなしでテストするのは難しいです。 –