将选定行连接到一行中,R中不留空格(使用forloop)

将选定行连接到一行中,R中不留空格(使用forloop),r,for-loop,concatenation,R,For Loop,Concatenation,我正在尝试将多行连接成一行 每一行都以>基因标识符或序列信息开头 >Zfyve21 | ENSMUSG00000021286 | ENSMUST00000021714 GCGGGCGGCGGGGTGGCGCCTTGTGGGCTCAGGCGGGCGGTGGCGTGAGGGCTC 阿加加 >Laptm4a | ENSMUSG000000020585 | ENSMUST000000020909 GCAGTGACAGAGACAGACGTGCGAAGAGACAGCCAATCTCCGGCGCGCTGTCGC

我正在尝试将多行连接成一行

每一行都以>基因标识符或序列信息开头

>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会话中是分开的,因此这应该可以工作:

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