簡體   English   中英

如何計算 R 中每列中殘基(核苷酸)覆蓋率的頻率?

[英]How to calculate frequency of residue(nucleotide) coverage in each column in R?

我有一個包含如下數據集的fasta文件:

>sequence_1
ACCTGC--A
>sequence_2
ACC-GCTTA
>sequence_3
ACCTGCTTA

最終目標是產生表明核苷酸覆蓋百分比的結果。 因此,我會得到 100%、100%、100%、66.66%、100%、100%、66.66%、66.66$、100%。

我對 R 相當陌生,我現在的想法是將序列作為字符串讀取,然后轉換為列表,然后循環遍歷所有列表的第一個元素,所以沒有。

有沒有更簡單的方法來做到這一點?

這是strsplit的簡單解決方案。

Biostrings使讀取.fasta文件變得輕而易舉。 請注意,這種方法要求序列已經對齊。

#BiocManager::install("Biostrings")
library(Biostrings)
data <- readDNAStringSet("data.fasta")
split <- strsplit(as.character(data),"")
logical.mat <- sapply(split, function(x) x != "-")
rowSums(logical.mat) / ncol(logical.mat)
#[1] 1.0000000 1.0000000 1.0000000 0.6666667 1.0000000 1.0000000 0.6666667 0.6666667 1.0000000

沒有使用生物包的經驗..所以這里有一個data.table方法......

library( data.table )
DT <- data.table( text = c( "ACCTGC--A", "ACC-GCTTA", "ACCTGCTTA" ))

#         text
# 1: ACCTGC--A
# 2: ACC-GCTTA
# 3: ACCTGCTTA

#split text to nucleoid
#get maximum number of nucleoid
n_max = length( tstrsplit(gsub("(.)", "\\1 ", DT$text), " ") )
#create a new column for each nucleoid
DT[, paste0( "nucl_", 1:n_max ) := tstrsplit(gsub("(.)", "\\1 ", text), " ") ]
#         text nucl_1 nucl_2 nucl_3 nucl_4 nucl_5 nucl_6 nucl_7 nucl_8 nucl_9
# 1: ACCTGC--A      A      C      C      T      G      C      -      -      A
# 2: ACC-GCTTA      A      C      C      -      G      C      T      T      A
# 3: ACCTGCTTA      A      C      C      T      G      C      T      T      A
                           
#how to procees? possibly melt and summarise?
DT.melt <- melt(DT, id.vars = "text", measure.vars = patterns("^nucl") )
ans <- DT.melt[, .N, by = .(variable, value) ][, perc := N / sum(N), by = .(variable)][]

#     variable value N      perc
# 1:    nucl_1     A 3 1.0000000
# 2:    nucl_2     C 3 1.0000000
# 3:    nucl_3     C 3 1.0000000
# 4:    nucl_4     T 2 0.6666667
# 5:    nucl_4     - 1 0.3333333
# 6:    nucl_5     G 3 1.0000000
# 7:    nucl_6     C 3 1.0000000
# 8:    nucl_7     - 1 0.3333333
# 9:    nucl_7     T 2 0.6666667
# 10:   nucl_8     - 1 0.3333333
# 11:   nucl_8     T 2 0.6666667
# 12:   nucl_9     A 3 1.0000000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM