michael0214的个人博客分享 http://blog.sciencenet.cn/u/michael0214

博文

数据去冗余问题

已有 4618 次阅读 2014-9-20 00:02 |系统分类:科研笔记

处理生物学数据时,最经常遇到的就是数据冗余(或者说是重复)问题。要得到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 






https://blog.sciencenet.cn/blog-689440-829230.html

上一篇:重新选择文本编辑器
下一篇:Cygwin - Windows下的Linux模拟器
收藏 IP: 99.112.126.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-27 00:19

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部