|
处理生物学数据时,最经常遇到的就是数据冗余(或者说是重复)问题。要得到Unique 的数据,这里给出了几种方法:
1. 基于Linux Command:
上述问题最简单地解决方法莫过于使用Linux 下的uniq 命令了,不过要注意的是,uniq 命令要和sort 结合在一起才能发挥威力。
举例如下:
File1:
1
3
4
1
2
Terminal 下输入:> sort File1 || uniq
即可得到:
1
2
3
4
有关sort 以及uniq 的高级命令,参照:http://www.linuxdevcenter.com/cmd/cmd.csp?path=u/uniq 以及 http://www.linuxdevcenter.com/cmd/cmd.csp?path=s/sort
2. 利用perl 语言编程:
perl 无疑是文本数据处理的最佳工具,其强大的模式匹配功能尤其无可匹敌。言归正传,通常有三种方法可以解决上述问题。
1)最原始最粗暴的方法。由于本人之前主要是用Java,所以错误的把这个思想也用到了perl 中。基本想法是创立一个新的uniq数组,和原始数据数组比较(利用for 循环),不断添加新的uniq 数据到uniq 数组中(效率太低,不必写出代码了)。
2) 借助于hash 表的keys 唯一的特性:
例如:
my @array = (1,6,5,0,6,2,0,7,7,8);
my %Count;
foreach my $Item (@Array){$Count{$_Item} ++;
}
my @Uniq_Array = keys %Count;
3)Perl的一个重要优势是可以借用其他语言的方法,比如 Linux shell,
网上的做法基本上是基于 grep 版本的:
my @array = (1,6,5,0,6,2,0,7,7,8);
my %count;
my @uniq_array = grep { ++$count{ $_ } < 2 } @array;
4) 更为简单的方法是直接调用 List::MoreUtils 模块里面的 uniq 函数
use List::MoreUtils qw/uniq/;
my @array = (1,6,5,0,6,2,0,7,7,8);
my @uniq_array = uniq @array; # 得到 1,6,5,0,2,7,8
更加详细内容,请参考:http://bnuzhutao.cn/archives/845
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-9-14 18:20
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社