【发布时间】:2015-07-02 07:33:23
【问题描述】:
我在 R 中解决这个问题时遇到了问题。我有一个名为 testa 的数据框(包括 dput)。我需要将ALT 列中的所有字母与列名(A,C,G,T,N) 匹配,并获取这些列中的相应值以及REF 字母的值并得到结果ad.new(我的代码完成了这项工作)。
但是,我需要扩展此代码以解决TYPE 列末尾有flat 的行的问题。对于带有flat 的行,我需要将其起始ID (chr10:102053031) 与起始列中的其他ID 匹配。如果它们匹配,我需要从 A,C,G,T,N 列总结 ALT 的相应值,并将其替换为平线的 ad.new 列以及 REF 值。
如果您运行dput 和我的代码,您将能够理解它。所以基本上,我想匹配REF 和ALT 列中的字母,并从列(A,C,G,T,N)中获取相应的值,并用逗号分隔REF 和ALT 的这些值。但是(在本例中),对于flat 行,我想将A 列中的值与匹配的起始ID 与flat 行的起始ID 相加(本例中的值为6)和值与另一个匹配项(本例中的值是来自G 列的7)并将它们相加得到13。所以对于扁平线,我的结果应该是0,13。
预期的结果也如下所示。
我的不完整代码:
testa[is.na(testa)]<-0
ref.counts<-testa[,testa[,"REF"]]
ref.counts<-as.matrix(Ref.counts)
ref.counts[is.na(Ref.counts)]<-0
ref.counts<-diag(Ref.counts)
alt.counts<-testa[,testa[,"ALT"]]
alt.counts<-as.matrix(alt.counts)
alt.counts[is.na(alt.counts)]<-0
alt.counts<-diag(alt.counts)
#############
##need to extend this code here
#############
ad.new<-paste(Ref.counts,alt.counts,sep=",")
测试的输入:
structure(c("chr10:101544447", "chr10:102053031", "chr10:102778767",
"chr10:102789831", "chr10:102989480", "chr10:102053031", "chr10:102053031",
"0", "6", "0", "0", "0", "0", "0", "0", "34", "24", "0", "0",
"34", "34", "0", "0", "0", "0", "0", "0", "7", "53", "0", "0",
"30", "12", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0",
"chr10", "chr10", "chr10", "chr10", "chr10", "chr10", "chr10",
"101544447", "102053031", "102778767", "102789831", "102989480",
"102053031", "102053031", "A", "C", "C", "C", "C", "C", "C",
"T", "A", "T", "T", "T", "G", "G", "snp", "snp", "snp", "snp",
"snp", "snp:102053031:flat", "snp", "nonsynonymous SNV",
"intronic", "nonsynonymous SNV", "nonsynonymous SNV", "ncRNA_exonic",
"intronic", "intronic", "ABCC2:NM_000392:exon2:c.A116T:p.Y39F,",
"PKD2L1", "PDZD7:NM_024895:exon8:c.G1136A:p.R379Q,PDZD7:NM_001195263:exon8:c.G1136A:p.R379Q,",
"PDZD7:NM_024895:exon2:c.G146A:p.R49Q,PDZD7:NM_001195263:exon2:c.G146A:p.R49Q,",
"LBX1-AS1", "PKD2L1", "PKD2L1"), .Dim = c(7L, 15L), .Dimnames = list(
c("1", "2", "3", "4", "5", "6", "7"), c("start", "A", "C",
"G", "T", "N", "=", "-", "chr", "end", "REF", "ALT", "TYPE",
"refGene::location", "refGene::type")))
预期结果
ad.new
"0,53"
"34,6"
"24,0"
"0,30"
"0,12"
"0,13"
"34,7"
【问题讨论】:
-
你能澄清一下扁平线的规则吗?如果“A”和“G”中的值没有在任何地方指定,我为什么要选择它们?
-
A 和 G 是 ALT 列中第 2 行和最后一行中的字母(与 TYPE 列中的平线 ("snp:102053031:flat") 的起始 id chr10:102053031 匹配的行) .所以扁线应该有 ALT 值的总和。 'start' 列是染色体编号和基因位置,平线基本上是所有基因位置的总和(匹配起始列中的 id)。谢谢!
-
从技术上讲,扁线的 ALT 列应该同时包含其他两个匹配行中的 A 和 G 字母(因此我的结果中需要总和),但在我们的遗传学要求中,我们只提到最常见的(或主要的)在这种情况下是 G。
-
所以它将始终是“A”列中的值与任何其他列中具有最多非零值的所有值的总和,按“end”分组?
-
不总是 A 列。平线中的起始 id 与其他两行匹配,在这种情况下,它们的 ALT 字母 ar A 和 G 对应的值分别为 6 和 7。有许多扁平线,每条扁平线将有多个其他匹配的行(通常每个扁平行有两行)。我想我需要一个函数来获取与扁平线的起始 id 匹配的行的 ALT 字母及其对应的值,并最终将它们总结起来。
标签: r