我有一個數據框,其中包含各種主題,每個主題都至少貢獻一個組織樣本,即血液,心臟,肝臟等,而其中許多組織樣本貢獻了樣本的多個組織。有31個獨特的組織,我想創建一個31×31矩陣,指示從單個主題收集的組織對。在行列名稱是組織名稱的情況下,對角線將給出從中收集組織樣本的受試者的總數,並且對角線將包括已經給予兩者的受試者的數量(即,如果受試者已經給出了心肺樣本,心臟行/列和肺列/行增加1)。到目前爲止,我已經能夠將數據(使用plyr
)獲取到數據框counts
中,該數據框包括找到的每個唯一對以及貢獻了兩種組織類型的對象的數量。當SMTS1
和SMTS2
匹配,在Count
的值表示組織R - 通過鍵和更新值在數據框中添加缺失對
> 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個條目,表明有一種組織類型,沒有發現脂肪組織。
我想要做的是讓SMTS1
中的每個獨特值與31種可能組織中的每一種配對。在所示的情況下,例如,脂肪組織只有30對,表明一對不存在。在這種情況下,那一對是骨髓。我想這樣的話,對我的counts
數據幀,在辨認出,創造另外兩行
SMTS1 SMTS2 Count
1 Adipose Tissue Bone Marrow 0
2 Bone Marrow Adipose Tissue 0
給0
值指示對不存在。從那裏開始,我應該有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
的。此外,我意識到,對於創建的每個新行,這不會爲counts$Count
值填入0
。
TL; DR我需要創建所有缺少的成對值並更新第三列,每個行創建0
。這些將被用於填充31×31矩陣,顯示哪些組織已經從同一個主題收集到一起。
'tidyr :: spread'? –
@RichardTelford我看了這個,看起來好像它會佔用我的「計數」數據框架,並基本上將它變成我想要的矩陣,這將非常棒。你知道這將如何處理丟失的鑰匙對嗎? – cnolte
很確定'tidyr :: complete'會在這裏工作,很難測試沒有計數的輸出 –