gpt4 book ai didi

r - 计算子字符串中特定字符的数量

转载 作者:行者123 更新时间:2023-12-04 12:24:57 25 4
gpt4 key购买 nike

我有一个包含两列的 8040 行文件,第二列具有可变长度的字符串,范围从 30000 到 200000 个字符(DNA 序列)。 [以下是150个字符的样本]

X:100670000-101060000    TTCCCCAAACAGCAACTTTAAGGAGCAGCTTCCTTTATGATCCCTGATTGCCTCCCCTTTGTTCCCATAACAAGTAGTTTAAATTTTCTGTTAAAGTCCAAACCACATATTTACAATACCTCGCACC

根据第二列每个字符串的长度,我想将每个字符串分成 10 个段(字符串长度的 10%),计算每个段的 G 和 C 的数量,并得到 G 的百分比和 C。

例如,如果我的第二列的第一个条目长度为 39000 个字符,则每个段的长度为 3900 个字符,代码将计算每个段中 G 和 C 的出现次数,将它们相加,然后除以 39000(在这种情况下) ,得到百分比。

我试着用 写这个AWK ,但它不起作用。我得到的输出是完整的字符串,而不是段:
awk '{
bp_length[$2]= length($2);
bin_size[$2]= bp_length[$2]*0.1;

for(i=1;i<=bp_length[$2];i+=bin_size[$2]){
print gsub("G", "G")"\t"gsub("C", "C")}

}'

我得到这个作为输出:
79060 76624

中解决这个问题会更容易吗? R ,如果输出可以表示在一个有 10 列的表中,每列代表每行的 10 个段?

最佳答案

由于您尝试在 awk 中进行此练习,我给你一个awk程序

此示例表明拆分和计数已正确完成:

awk '{l=length($2); binsize=int(l/10) + (l%10!=0)
for(i=1;i<=l;i+=binsize) {
str=substr($2,i,binsize)
print str, gsub("G","",str), gsub("C","",str)
}
}' <file>

给我们输出
TTCCCCAAACAGC 1 6
AACTTTAAGGAGC 3 2
AGCTTCCTTTATG 2 3
ATCCCTGATTGCC 2 5
TCCCCTTTGTTCC 1 6
CATAACAAGTAGT 2 2
TTAAATTTTCTGT 1 1
TAAAGTCCAAACC 1 4
ACATATTTACAAT 0 2
ACCTCGCACC 1 6

因此,为了获得百分比:
awk '{ l=length($2); binsize=int(l/10) + (l%10!=0)
printf "%-24s (length: %7d, binsize: %7d, lastbin: %7d)\n",$1,l,binsize,l%binsize
j=1;
for(i=1;i<=l;i+=binsize) {
str=substr($2,i,binsize)
printf "segment %0.3d : %6.3f (%%G) %6.3f (%%C)\n", j++,100*gsub("G","",str)/l, 100*gsub("C","",str)/l
}
}' <file>

输出是:
X:100670000-101060000    (length:     127, binsize:      13, lastbin:      10)
segment 001 : 0.787 (%G) 4.724 (%C)
segment 002 : 2.362 (%G) 1.575 (%C)
segment 003 : 1.575 (%G) 2.362 (%C)
segment 004 : 1.575 (%G) 3.937 (%C)
segment 005 : 0.787 (%G) 4.724 (%C)
segment 006 : 1.575 (%G) 1.575 (%C)
segment 007 : 0.787 (%G) 0.787 (%C)
segment 008 : 0.787 (%G) 3.150 (%C)
segment 009 : 0.000 (%G) 1.575 (%C)
segment 010 : 0.787 (%G) 4.724 (%C)

关于r - 计算子字符串中特定字符的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com