【发布时间】:2015-07-21 03:11:29
【问题描述】:
我有这个名为mydf 的数据。
我需要将REF 和ALT 列中的字母(DNA 字母)与colnames(x) ("A","T","G","C") 匹配,并将对应的数值粘贴在一起作为"REF,ALT"。
但是,在 TYPE 列中有一些行我有 "snp:+[0-9]" 和 "flat$"。
现在对于"flat$" 我想要的行:
-
sum 来自对应
"start"id 的多达"snp:+[0-9]"的ALT值,包括扁平线本身,如果ALT字母是唯一的(请参阅用大括号括起来的脚本 一个扁平线的括号) -
粘贴
ALT值再次作为"REF,ALT"(REF值将是"snp:+[0-9]"和"flat$"的起始 ID 相同) - 得到输出,如结果所示。
我已经为一条扁平线做了这个,但我需要帮助为flatcase 制作函数,以便它对所有扁平线都做同样的事情。
如何为flatcase 创建一个函数来执行此操作?
代码
normalCase <- function(x, ns) {
ref.idx <- which(ns == "REF")
ref.allele <- x[ref.idx]
ref.count <- x[which(ns == ref.allele)]
alt.idx <- which(ns == "ALT")
alt.allele <- x[alt.idx]
alt.count <- x[which(ns == alt.allele)]
paste(ref.count, alt.count, sep=",")
}
flatcase??{
g<-x[,"start"]=="chr16:2530921"& grepl("snp:+[0-9]",x[,"TYPE"])
myt<-x[g,]
x[g,"ALT"]
unique(x[g,"ALT"])
c<-unique(x[g,"ALT"])
flat<-myt[grepl("flat$",myt[,"TYPE"]),]
c<-unique(x[g,"ALT"])
alt.count<- sum(as.numeric(flat[c]))
}
calculateAD <- function(x, mat, ns) {
if (grepl("flat$", x[which(ns == 'TYPE')])) {
flatCase(x, mat, ns)
} else {
normalCase(x, ns)
}
}
bamAD <- function(x) {
new.x <- cbind(x, apply(x, 1, calculateAD, x, colnames(x)))
colnames(new.x)[ncol(new.x)] <- "bam.AD"
new.x
}
我为 flatCase 尝试过的功能是:
flatCase <- function(x, mat, ns) {
id.idx <- which(ns == 'start')
type.idx <- which(ns == 'TYPE')
ref.idx <- which(ns == 'REF')
alt.idx <- which(ns == 'ALT')
id <- x[id.idx]
#m <- mat[mat[, id.idx] == id & mat[, type.idx] == "snp", ]
#m <- mat[mat[, id.idx] == id & mat[, type.idx] == "snp", ]
m<-mat[grepl(id,mat[, id.idx]) & grepl("snp:+[0-9]",mat[, type.idx]),]
#flat<-mat[grepl("flat$",mat[, type.idx]),]
ref.allele <- x[ref.idx]
ref.count<-x[which(ns == ref.allele)]
alt.count <- sum(apply(m, 1, function(x) as.numeric(x[which(ns == x[alt.idx])])))
paste(ref.count, alt.count, sep=",")
}
mydf
x <- as.matrix(read.csv(text="start,A,T,G,C,REF,ALT,TYPE
chr20:5363934,95,29,14,59,C,T,snp
chr5:8529759,24,1,28,41,G,C,snp
chr14:9620689,65,49,41,96,T,G,snp
chr18:547375,94,1,51,67,G,C,snp
chr8:5952145,27,80,25,96,T,T,snp
chr14:8694382,68,94,26,30,A,A,snp
chr16:2530921,49,15,79,72,A,T,snp:2530921
chr16:2530921,49,15,79,72,A,G,snp:2530921
chr16:2530921,49,15,79,72,A,T,snp:2530921flat
chr16:2533924,42,13,19,52,G,T,snp:2533924flat
chr16:2543344,4,13,13,42,G,T,snp:2543344flat
chr16:2543344,4,23,13,42,G,A,snp:2543344
chr14:4214117,73,49,18,77,G,A,snp
chr4:7799768,36,28,1,16,C,A,snp
chr3:9141263,27,41,93,90,A,A,snp", stringsAsFactors=FALSE))
结果:
start A T G C REF ALT TYPE bam.AD
[1,] "chr20:5363934" "95" "29" "14" "59" "C" "T" "snp" "59,29"
[2,] "chr5:8529759" "24" " 1" "28" "41" "G" "C" "snp" "28,41"
[3,] "chr14:9620689" "65" "49" "41" "96" "T" "G" "snp" "49,41"
[4,] "chr18:547375" "94" " 1" "51" "67" "G" "C" "snp" "51,67"
[5,] "chr8:5952145" "27" "80" "25" "96" "T" "T" "snp" "80,80"
[6,] "chr14:8694382" "68" "94" "26" "30" "A" "A" "snp" "68,68"
[7,] "chr16:2530921" "49" "15" "79" "72" "A" "T" "snp:2530921" "49,15"
[8,] "chr16:2530921" "49" "15" "79" "72" "A" "G" "snp:2530921" "49,79"
[9,] "chr16:2530921" "49" "15" "79" "72" "A" "T" "snp:2530921flat" "49,94"
[10,] "chr16:2533924" "42" "13" "19" "52" "G" "T" "snp:2533924flat" "19,13"
[11,] "chr16:2543344" "42" "13" "13" "42" "G" "T" "snp:2543344flat" "13,55"
[12,] "chr16:2543344" "42" "23" "13" "42" "G" "A" "snp:2543344" "13,42"
[13,] "chr14:4214117" "73" "49" "18" "77" "G" "A" "snp" "18,73"
[14,] "chr4:7799768" "36" "28" " 1" "16" "C" "A" "snp" "16,36"
[15,] "chr3:9141263" "27" "41" "93" "90" "A" "A" "snp" "27,27"
【问题讨论】:
-
你能解释一下第 10 行“snp:2533924flat”:这里的 ALT 是 T,这是与
start唯一的一行,所以“REF,ALT”不应该是“19,13” ?此外,如果 ALT 不是唯一的会发生什么,例如假设“snp:2543344flat”行(第 11 行)具有 ALT“A”(即 4),第 12 行(具有 A=42)也是如此 - 您使用哪个 A? -
@mathematical.coffee 这些是基因型,在人类样本或小鼠身上进行。 SNP是单核苷酸多态性。长数字是该染色体上看到突变的碱基位置。 REF 是在该位置测序的规范碱基,而 ALT 是在抽样人群中看到的 SNP。输出显示 REF 碱基在总体中出现的次数,ALT 是“N”的替代碱基出现在该位置的次数。扁平线只是他们在该位置查看多个 ALT 碱基的摘要线。
-
@AMR 很好,但我不是遗传学家,不知道你在说什么,所有这些信息对我没有帮助。我确实看到您已经编辑了您的问题,但现在
mydf定义与您想要的输出不匹配 - 在定义x的mydf代码中,您已将第 11 行和第 12 行更改为在“A”列,但在你想要的结果中你没有。请确保您的输入和期望的输出是一致的。 -
@mathematical.coffee ...我没有发布问题。我的评论是向您解释发布的数据。我了解数据,所以我了解他的问题与数据的相关性。虽然我没有用 r 编码,所以我无法提供 r 答案。
-
@AMR 抱歉。但是,这些信息对我的具体问题没有帮助(OP 在其中一行上犯了一个错误,我需要澄清它。他们已经修复了它,因为虽然引入了更多......)。
标签: r bioinformatics genetics