我有一个数据框,其中包含各种主题,每个主题都至少贡献一个组织样本,即血液,心脏,肝脏等,而其中许多组织样本贡献了样本的多个组织。有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'会在这里工作,很难测试没有计数的输出 –