我有这种数据格式:

       df <- data.frame(seqpart=factor(c("", "ccagttgttg", "tttgattcg", "ctttgtc","", "ctttgtcga","cttagta", "ttactgt", "ttacat")),
       seqinfo= factor(c("IDseq1|specie1", "", "","","IDseq2|specie2","","","","")))

 > df
   seqpart         seqinfo
   <NA>            IDseq1|specie1
   ccagttgttg      <NA>
   tttgattcg       <NA>
   ctttgtc         <NA>
   <NA>            IDseq2|specie2
   ctttgtcga       <NA>
   cttagta         <NA>
   ttactgt         <NA>
   ttacat          <NA>


我想根据列seqinfo连接行,以使用这种新格式构造另一个数据:

>df1
 seqinfo             seq
 IDseq1|specie1      ccagttgttgtttgattcgctttgtc
 IDseq2|specie2      ctttgtcgacttagtattactgtttacat


有没有办法做到这一点?非常感谢

最佳答案

我们基于'seqinfo'中存在非空白元素来创建分组变量('grp'),将'seqinfo'中的非空白元素与paste'seqpart'一起获得

library(data.table)
setDT(df)[, .(seqinfo = seqinfo[seqinfo!=''],
  seqpart = paste(seqpart, collapse='')),.(grp = cumsum(seqinfo !=""))][, grp := NULL][]
#          seqinfo                       seqpart
#1: IDseq1|specie1    ccagttgttgtttgattcgctttgtc
#2: IDseq2|specie2 ctttgtcgacttagtattactgtttacat

关于r - 根据另一列的值连接一列的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45298279/

10-12 22:49