字符串中的字符位置

时间:2014-06-30 09:34:50

标签: string r perl

我的数据框包含column1中的字符串和column2中的ID。该字符串包含A,T,G or C。 我想打印位置为A的行。 然后我想在第2位打印A的行,依此类推,并将它们保存在单独的文件中。 到目前为止,我已经使用R中的biostrings进行类似的分析,但它不能完全解决这个问题。我想用perl。

Sequence                ID
TATACAAGGGCAAGCTCTCTGT  mmu-miR-381-3p
TCGGATCCGTCTGAGCT       mmu-miR-127-3p
ATAGTAGACCGTATAGCGTACG  mmu-miR-411-5p
......
600 more lines

3 个答案:

答案 0 :(得分:1)

Biostrings将完美运行,并且速度非常快。让我们称你的DNA字符串集mydata

HasA <- sapply(mydata,function(x) as.character(x[2]) == "A")

现在你有一个TRUE或FALSE向量,表明哪个序列在位置2有一个A.你可以将它变成一个很好的数据框,如下所示

HasA.df <- data.frame("SeqName" = names(mydata), "A_at_2" = HasA)

答案 1 :(得分:1)

不确定预期的结果,

 mydata <- read.table(text="Sequence                ID
 TATACAAGGGCAAGCTCTCTGT  mmu-miR-381-3p
 TCGGATCCGTCTGAGCT       mmu-miR-127-3p
 ATAGTAGACCGTATAGCGTACG  mmu-miR-411-5p",sep="",header=T,stringsAsFactors=F)

  mCh <- max(nchar(mydata[,1])) #gives the maximum number of characters in the first column

 sapply(seq(mCh), function(i) substr(mydata[,1],i,i)=="A") #gives the index

您可以使用which获取满足每个位置条件的行的索引

  res <-  stack(setNames(sapply(seq(mCh), 
        function(i) which(substr(mydata[,1],i,i)=="A")),1:mCh))[,2:1]

  tail(res, 5) #for the 13th position, 1st and 3rd row of the sequence are TRUE
  ind values
#11  13      1
#12  13      3
#13  14      2
#14  15      3
#15  20      3

使用索引values来提取行。第一名

 mydata[res$values[res$ind==1],]
  #               Sequence             ID
# 3 ATAGTAGACCGTATAGCGTACG mmu-miR-411-5p

答案 2 :(得分:0)

使用perl one-liner

perl -Mautodie -lane '
  BEGIN {($f) = @ARGV}
  next if $. == 1;
  my @c = split //, $F[0];
  for my $i (grep {$c[$_] eq "A"} (0..$#c)) {
    open my $fh, ">>", "$f.$i";
    print $fh $_;
  }
' file