将选定行连接到一行中,R中不留空格(使用forloop)
我正在尝试将多行连接成一行 每一行都以>基因标识符或序列信息开头 >Zfyve21 | ENSMUSG00000021286 | ENSMUST00000021714 GCGGGCGGCGGGGTGGCGCCTTGTGGGCTCAGGCGGGCGGTGGCGTGAGGGCTC 阿加加 >Laptm4a | ENSMUSG000000020585 | ENSMUST000000020909 GCAGTGACAGAGACAGACGTGCGAAGAGACAGCCAATCTCCGGCGCGCTGTCGC CACCAACTCCGTCTTGTTCCCTTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCGCGGAGTCGTCTCTGGGAGAGACGTGA 附件CCAGGCGCCATTCCTACCAGCCCCGACGAGCCAGCCGCCACCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGC GGTCAACAGCCGCCGGAGAGAGAGATGGGACTGACTTTTGATGGGCGTGTGTTTCAATTCCA CATCTTCCAATCAAGAGAGCCGGCCTTCCGCTCTTCGTTGGTCTGT 这里我只放了两个基因,但有数百个基因跟随着这个。 基本上,我将只保留基因标识符,但我只想在序列被分成多行时连接序列 因此,最终结果应如下所示: 序列被连接并组合成一行,中间没有任何空间 >Zfyve21 | ENSMUSG00000021286 | ENSMUST00000021714 GCGGGCGGCGGGGTGGCGCCTTGTGGGCTCAGGCGCGGGCGGTGGCGTGAGGGCTCAGGAGA >Laptm4a | ENSMUSG000000020585 | ENSMUST000000020909 GCAGTGACAGAGACAGAGACAGAGAGACAGAGAGCGCCAATCTCTCGCGCTCTCGCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCGGAGAGAGACTCGCACATTCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCTCGCGCGCGCATCAATCAGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGC 通过在R中使用粘贴功能,我可以手动实现这一点。 i、 e.pastedat[2,1],dat[3,1],九月= 然而,我有一个基因恐惧列表,所以我需要一种自动连接行的方法 我在考虑forloop,基本上,如果行从>开始,跳过它,但是如果它不是从>开始,则连接 但我不是生物信息学/R方面的专家,我很难真正生成一个脚本来实现它将选定行连接到一行中,R中不留空格(使用forloop),r,for-loop,concatenation,R,For Loop,Concatenation,我正在尝试将多行连接成一行 每一行都以>基因标识符或序列信息开头 >Zfyve21 | ENSMUSG00000021286 | ENSMUST00000021714 GCGGGCGGCGGGGTGGCGCCTTGTGGGCTCAGGCGGGCGGTGGCGTGAGGGCTC 阿加加 >Laptm4a | ENSMUSG000000020585 | ENSMUST000000020909 GCAGTGACAGAGACAGACGTGCGAAGAGACAGCCAATCTCCGGCGCGCTGTCGC
任何帮助都将不胜感激 当我将其粘贴到应答框中以连接数据行时,发生了一些事情,但它们在我的R会话中是分开的,因此这应该可以工作:
Lines <-
readLines(textConnection(">*>Zfyve21|ENSMUSG00000021286|ENSMUST00000021714
GCGGGCGGGGCGGGGTGGCGCCTTGTGTGGGCTCAGCGCGGGCGGTGGCGTGAGGGGCTCAGGCGGAGA*
>*>Laptm4a|ENSMUSG00000020585|ENSMUST00000020909
GCAGTGACAAAGACAACGTGGCGAAAGACAGCGCCAAAAATCTCCGTGCCCGCTGTCTGCCACCAACTCCGTCTTGTTTCACCCTTCTCCTCCTTGCGGAGCTCGTCTGGGAGACGGTGAATTACCGAGTTACCCTCAATTCCTACAGCCCCCGACAGCGAGCCCAGCCACGCGCACCGCGGTCAAACAGCGCCGGAGAGAGTTGAACTTTTGATTGGGCGTGATCTGTTTCAATCTCCACATCTTCTCCAATCAGAAGCCAGGTAGCCCGGCCTTCCGCTCTTCGTTGGTCTGT*
"))
geneIdx <- grepl("\\|", Lines)
grp <- cumsum(geneIdx)
grp
#[1] 1 1 1 2 2 2
tapply(Lines, grp, FUN=function(x) c(x[1], paste(x[-1], collapse="") ) )
#----------------------
$`1`
[1] ">*>Zfyve21|ENSMUSG00000021286|ENSMUST00000021714"
[2] "GCGGGCGGGGCGGGGTGGCGCCTTGTGTGGGCTCAGCGCGGGCGGTGGCGTGAGGGGCTCAGGCGGAGA*"
$`2`
[1] ">*>Laptm4a|ENSMUSG00000020585|ENSMUST00000020909"
[2] "GCAGTGACAAAGACAACGTGGCGAAAGACAGCGCCAAAAATCTCCGTGCCCGCTGTCTGCCACCAACTCCGTCTTGTTTCACCCTTCTCCTCCTTGCGGAGCTCGTCTGGGAGACGGTGAATTACCGAGTTACCCTCAATTCCTACAGCCCCCGACAGCGAGCCCAGCCACGCGCACCGCGGTCAAACAGCGCCGGAGAGAGTTGAACTTTTGATTGGGCGTGATCTGTTTCAATCTCCACATCTTCTCCAATCAGAAGCCAGGTAGCCCGGCCTTCCGCTCTTCGTTGGTCTGT*"
正则表达式会起作用吗?下面的正则表达式删除换行符\\n后跟>?!>消极的前瞻
不过我只有一个问题。当行被分离时,它会生成很好的连接结果,如您所示。第一列作为基因名称,第二列作为序列信息->[1]>Zfyve21 | ENSMUSG00000021286 | ENSMUST00000021714[2]GCGGGCGGCGGGGTGTGGGCGCGCGGGCGGGCGGTGGCGTGAGGGCTCAGAGAGACHOWEVER,当原始序列足够短,在第一位没有单独的行时,它生成一行,显示同一行中的基因名称和序列。示例如下->[1]>Stk35 | ENSMUSG00000037885 | Ensmust0000165413 GGCTCCGCGCGCGCTGGGGG这一个有“一行指示为[1],基因名称和序列在同一行。有没有办法避免这种情况?我会抬起头来研究tapply和其他人来了解我自己,但如果你能给我建议,那将是非常棒的!!我不知道该如何读入它并使用管道作为分隔物。您需要编辑您的问题以放入边缘案例中进行测试。抱歉,BondedDust,我再次查找了我的R会话,您的方法实际上非常有效!!。我很困惑,因为有些序列很短。原来这只是因为我的屏幕太宽了。无论如何,非常感谢你的帮助!!!!!谢谢你,伊恩,我试过了,但似乎你的方法只有在每行之间用“n”分隔时才有效。我的原始数据集由单独的行分隔。如果我能把每一行组合起来,我认为这种方法也应该有效。我会再试一次。@gdy:The\\n实际上指的是换行符\n,用额外的反斜杠转义这个字符。这可能是因为行与行之间没有换行符,例如,我认为这种情况发生在Windows上。我想你可以用str来识别是什么在分隔你的行:>strtext chr>Zfyve21 | ENSMUSG00000021286 | ENSMUST00000021714\ngcggcggcggcggcggcgttgtgtgtgtgtgggctcggcggcggcgggtggcgtggggggggctc\n\n>Lap | | | |我明白了,我想我明白你的策略了。但我不知道如何检查换行符。当我尝试>catmydata时,所有行现在都连接在一起,并且中间有一个空格,\n而不是您所指出的那样。这可能就是问题所在。谢谢你@我使用str而不是cat来查看角色。
text <-">Zfyve21|ENSMUSG00000021286|ENSMUST00000021714
GCGGGCGGGGCGGGGTGGCGCCTTGTGTGGGCTCAGCGCGGGCGGTGGCGTGAGGGGCTC
AGGCGGAGA
>Laptm4a|ENSMUSG00000020585|ENSMUST00000020909
GCAGTGACAAAGACAACGTGGCGAAAGACAGCGCCAAAAATCTCCGTGCCCGCTGTCTGC
CACCAACTCCGTCTTGTTTCACCCTTCTCCTCCTTGCGGAGCTCGTCTGGGAGACGGTGA
ATTACCGAGTTACCCTCAATTCCTACAGCCCCCGACAGCGAGCCCAGCCACGCGCACCGC
GGTCAAACAGCGCCGGAGAGAGTTGAACTTTTGATTGGGCGTGATCTGTTTCAATCTCCA
CATCTTCTCCAATCAGAAGCCAGGTAGCCCGGCCTTCCGCTCTTCGTTGGTCTGT"
cat(text)
cat(gsub("\\n(?!>)", "", text, perl=TRUE))
>Zfyve21|ENSMUSG00000021286|ENSMUST00000021714GCGGGCGGGGCGGGGTGGCGCCTTGTGTGGGCTCAGCGCGGGCGGTGGCGTGAGGGGCTCAGGCGGAGA
>Laptm4a|ENSMUSG00000020585|ENSMUST00000020909GCAGTGACAAAGACAACGTGGCGAAAGACAGCGCCAAAAATCTCCGTGCCCGCTGTCTGCCACCAACTCCGTCTTGTTTCACCCTTCTCCTCCTTGCGGAGCTCGTCTGGGAGACGGTGAATTACCGAGTTACCCTCAATTCCTACAGCCCCCGACAGCGAGCCCAGCCACGCGCACCGCGGTCAAACAGCGCCGGAGAGAGTTGAACTTTTGATTGGGCGTGATCTGTTTCAATCTCCACATCTTCTCCAATCAGAAGCCAGGTAGCCCGGCCTTCCGCTCTTCGTTGGTCTGT