R代码用于分析基因分型数据。
我有这个数据帧(R代码用于分析基因分型数据。,r,bioinformatics,R,Bioinformatics,我有这个数据帧(mydf)。我需要将列REF和ALT中的字母(DNA字母)与列名称(“A”、“T”、“G”、“C”)匹配,并将相应的数值粘贴在一起作为“REF,ALT”。然而,在TYPE列中有一些行有“snp:+[0-9]”和“flat$”。现在,对于“flat$”行,我想将对应“start”ID的“snp:+[0-9]”中的ALT值相加,并将该ALT值再次粘贴为“REF,ALT”(对于“snp:+[0-9]”和具有相同起始ID的“flat$”,REF值将相同),并获得结果所示的输出。我如何制作
mydf
)。我需要将列REF和ALT中的字母(DNA字母)与列名称(“A”、“T”、“G”、“C”)匹配,并将相应的数值粘贴在一起作为“REF,ALT”。然而,在TYPE列中有一些行有“snp:+[0-9]”和“flat$”。现在,对于“flat$”行,我想将对应“start”ID的“snp:+[0-9]”中的ALT值相加,并将该ALT值再次粘贴为“REF,ALT”(对于“snp:+[0-9]”和具有相同起始ID的“flat$”,REF值将相同),并获得结果所示的输出。我如何制作一个函数来实现这一点
mydf<-structure(c("chr20:5363934", "chr5:8529759", "chr14:9620689",
"chr18:547375", "chr8:5952145", "chr14:8694382", "chr16:2530921",
"chr16:2530921", "chr16:2530921", "chr14:4214117", "chr4:7799768",
"chr3:9141263", "95", "24", "65", "94", "27", "68", "49", "49",
"49", "73", "36", "27", "29", " 1", "49", " 1", "80", "94", "15",
"15", "15", "49", "28", "41", "14", "28", "41", "51", "25", "26",
"79", "79", "79", "18", " 1", "93", "59", "41", "96", "67", "96",
"30", "72", "72", "72", "77", "16", "90", "C", "G", "T", "G",
"T", "A", "A", "A", "A", "G", "C", "A", "T", "C", "G", "C", "T",
"A", "T", "G", "T", "A", "A", "A", "snp", "snp", "snp", "snp",
"snp", "snp", "snp:2530921", "snp:2530921", "snp:flat", "snp", "snp", "snp"), .Dim = c(12L,
8L), .Dimnames = list(NULL, c("start", "A", "T", "G", "C", "REF",
"ALT", "TYPE")))
indx基于snp[0-9]
的flat
中值的sum
不清楚。是否必须是相邻的先前值?是的,总和是对应snp[0-9]的相邻值之和。即。具有相同起始ID的行。对于具有相同起始ID的所有行,ref保持不变,但flat的ALT必须是具有相同起始ID的所有snp的组合(除了flat本身)。是的,它需要更多的工作。我必须更好地对“snp:flat”值进行分组。我在考虑v1@user277653你能试试我在评论中发布的代码以及indx吗?我已经更新了答案,并在不同的组合上进行了测试。它与您提供的数据和其他迭代一起工作。如果仍然出现错误,则需要发布不同的示例。因为这些是有效的。这是一种将两个步骤结合为一个步骤的方法。而不是长版本,x
start A T G C REF ALT TYPE 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:flat" "49,94"
[10,] "chr14:4214117" "73" "49" "18" "77" "G" "A" "snp" "18,73"
[11,] "chr4:7799768" "36" "28" " 1" "16" "C" "A" "snp" "16,36"
[12,] "chr3:9141263" "27" "41" "93" "90" "A" "A" "snp" "27,27"
indx <- sapply(mydf[,c("REF", "ALT")], function(x) match(x, colnames(mydf)))
flat <- grepl("flat", mydf[,"TYPE"])
x <- `dim<-`(mydf[cbind(rep(1:nrow(mydf), 2), indx)], c(nrow(mydf), 2))
add_ids <- mydf[,"start"][mydf[,"start"] %in% mydf[,"start"][flat] & !flat]
toadd <- x[,2][mydf[,"start"] %in% mydf[,"start"][flat] & !flat]
x[,2][flat] <-tapply(as.numeric(toadd), factor(add_ids, levels=unique(add_ids)), sum)
cbind(mydf, paste(x[,1], x[,2],sep=","))
# start A T G C REF ALT TYPE
# [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:flat" "49,94"
# [10,] "chr14:4214117" "73" "49" "18" "77" "G" "A" "snp" "18,73"
# [11,] "chr4:7799768" "36" "28" " 1" "16" "C" "A" "snp" "16,36"
# [12,] "chr3:9141263" "27" "41" "93" "90" "A" "A" "snp" "27,27"