统计txt中某个字符出现的次数r语言_linux 极简统计分析工具 datamash 必看教程

引子

之前写 awk 教程的时候,曾经提到过一些对文本中行列进行某些计算统计的需求,例如使用数组分类求和。一些基本需求 awk 都可以实现,但是写起来稍显复杂。在 R 中使用 dplyr 或者基础函数 aggregate() 可以方便的进行分组操作,如果能在 linux 中使用更加简洁的单行命令针对数值和字符进行一些基本运算就省去了在 R 终端操作的时间。这篇文章介绍一个 linux 中能满足这类需求的工具 GNU datamash

温馨提示:文章长度可能超出你的耐心1b28ed027391144d7445a2ce0ed13765.png,看到哪里看不下去了就先分享朋友圈有机会再慢慢看 f3613fb090fe690427372286962ff73e.png。也可以划到文末移步 a88cbc7e32e86bbb9dc720d3563539d9.png 阅读原文 获得更好阅读体验。

两个使用 awk 的例子如下:

cat  awk2.txt
USSR    8649    275     Asia
Canada  3852    25      North_America
China   3705    1032    Asia
USA     3615    237     North_America
Brazil  3286    134     South_America
India   1267    746     Asia
awk '{ pop[$4] += $3 }END{ for (name in pop) print name,pop[name]}' awk2.txt

#North_America 262
#Asia 2053
#South_America 134

例如利用 getline 通过第一列信息判断,将第一列相同的第二列内容合并。

cat awk3.txt

a       qw
a       we
a       wet
b       wer
b       klj
b       piu
c       eie
c       tmp
c       ike

awk 'BEGIN{getline;a=$1;printf ("%s\t%s",$1,$2)}{if(a==$1){printf ","$2}else{printf "\n%s\t%s",$1,$2;a=$1}}END{printf "\n"}' awk3.txt

a       qw,we,wet
b       wer,klj,piu
c       eie,tmp,ike

datamash 是什么

在 gnu 官网 中,用了下面一句话来介绍 datamash。

GNU datamash is a command-line program which performs basic numeric, textual and statistical operations on input textual data files.

datamash 作为一个命令行程序可以对文本文件进行数字和文本相关的基本统计操作(虽说基本但是所有的操作都足够常用高频)。

使用前首先进行安装,可以通过 sudo apt-get install datamash 来进行安装或者通过源码来安装最新版本,这里采用第二种方式。

wget https://ftp.gnu.org/gnu/datamash/datamash-1.4.tar.gz
tar -xzf datamash-1.4.tar.gz
cd datamash-1.4
./configure
make
make check
sudo make install

调用格式与参数

datamash 的基本调用格式如下:

datamash [option]… op1 column1  [op2 column2 …]

上面的内容转换为描述语言就是:在 option 的参数下,对 column1 列进行 op1 操作,对 column2 列进行 op2 操作。如果使用 --group 参数,所有的 operation 都将会分组进行;如果没有使用 --group,所有的 operation 会对所有的值进行。需要说明的是这里的 column1 可以是表示第几列的数字,当使用 -H 或者 --header-in 时可以是所选字段的名称,可以使用列名,当 operation 要求输入成对数据的时候使用: 连接,比如 spearson 5:6

主要 operation

不同版本支持的参数不同,以下参数适用于 v1.4 版本。在分组统计相关的参数中,p/s 前缀分别代表 population 或者 sample。一般而言,sample 对应的计算等同于 R 中对应函数,例如 sstdev 和 sd() 是一致的。

Primary operations:

primary operations 决定了文件将被如何处理,如果 primary operatino 没有设置,整个文件将会被逐行处理(针对 per-line operation)或者将所有行按照一组进行处理。

  • groupby:分组等同于 --group 或者 -g 参数。后面指定用于分组的列

  • crosstab:类似于 excel 中的数据透视表 Pivot Table,可以按照两列来处理矩阵,默认是计算在 a,b 中出现的次数

  • transpose:交换行列,转置,等价于 R 中的 t()

  • reverse:反转字段顺序,交换列

  • check:验证数据结构,保证每行字段相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值