前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >dplyr-cli:在Linux Terminal上直接执行dplyr

dplyr-cli:在Linux Terminal上直接执行dplyr

作者头像
生信菜鸟团
发布于 2020-05-19 04:37:01
发布于 2020-05-19 04:37:01
2.2K00
代码可运行
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团
运行总次数:0
代码可运行

熟悉R的朋友都会知道, dplyr包是对原始的数据集进行清洗、整理以及变换的有力武器之一。但是其使用会局限于你需要有打开R/R studio或者通过R脚本来执行 dplyr对于这个问题,今天即将需要介绍的 dplyr-cli就能很好的解决这个问题。

dplyr包的介绍

首先再和大家简单介绍一下 dplyr包(避免有些刚入门的朋友可能不熟悉)。

dplyr包是 Hadley Wickham ( ggplot2包,各种R语言书籍的作者,被称作“一个改变R的人”)的杰作, 并自称 a grammar of data manipulation, 他将原本 plyr 包中的 ddply()等函数进一步分离强化,专注接受dataframe对象, 大幅提高了速度, 并且提供了更稳健的与其它数据库对象间的接口。

dplyr包的功能主要包括:

  • 变量筛选函数 select
  • 筛选函数 filter
  • 排序函数 arrange
  • 变形(计算)函数 mutate
  • 汇总函数 summarize
  • 分组函数 group_by
  • 多步操作连接符 %>%
  • 随机抽样函数 sample_n,sample_frac

dplyr-cli的介绍

了解完 dplyr包之后,就要介绍咱们这个推文的主角了 dplyr-clidplyr-cli设计的初衷就是让我们能够方便快速的在不打开R的情况下,在命令行中运行 dplyr,处理csv的文件。

目前 dply-cli支持任何形式的 dplyr::verb(.data,code)或者 dplyr::*_join(.data,.rhs)命令。另外支持两个额外的命令,它们并不是原始 dplyrR包的一部分。

  • csv 不执行dplyr命令,仅将输入数据作为CSV输出到stdout
  • kable不执行dplyr命令,而仅将输入数据作为 knitr::kable()格式字符串输出到stdout

其工作原理:dplyr-cli使用 {littler}在终端中的CSV文件上运行dplyr命令。

什么是littler?littler命令行前端由“ r”(又称“轻量”)提供,作为围绕GNU R语言和统计计算和图形环境的轻量级二进制包装器。尽管R可以在批处理模式下使用,但r二进制文件完全支持'shebang'样式的脚本(即在脚本的第一行中使用hash-mark-exclamation-path表达式)以及在标准Unix管道。换句话说,该工具提供了无环境的R语言。

另外一个很友善的功能是, dplyr-cli使用终端管道 |运行命令。

目前的不足:

  • 仅在 OSXYMMV的bash下测试过
  • 每个命令的实质是在单独的R中运行

安装

虽然 dply-cli是可以直接在命令行中直接使用,但是其执行时候还是会依赖到R包。所以首先让我们先把他们安装好:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
install.packages('littler')  # Scripting front-end for Rinstall.packages('glue')     # text manipulationinstall.packages('dplyr')    # data manipulationinstall.packages('docopt')   # CLI description language

安装好R包后就是到Github中将 dply-cli将其shell脚本下载好,并且放到合适的path中来执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/coolbutuseless/dplyr-clicp dplyr-cli/dplyr ./somewhere/in/your/search/path

工具使用

安装好工具第一件事当然是看看帮助文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./dplyr --help
Warning message:package ‘dplyr’ was built under R version 3.5.2dplyr-cli
Usage:    dplyr <command> [--file=fn] [--csv | -c] [--verbose | -v] [<code>...]    dplyr -h | --help
Options:    -h --help            show this help text    -f FILE --file=FILE  input CSV or RDS filename. If reading from stdin, assumes CSV [default: stdin]    -c --csv             write output to stdout in CSV format (instead of default RDS file)    -v --verbose         be verbose

和R一样,帮助文档首先告诉你当前的 ‘dplyr’的版本,然后一系列执行的参数。

接着我们就通过一系列的实战例子来了解一下如何使用这个好用的工具,这里会使用到 mtcars.csv这个文件,当你从Github下载 dplyr-cli时,会包含其作为一个测试文件:

例子一:简单的基本操作

输出mpg值为21的行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
##这里的 -c选项是用于输出格式为CSV的stdoutcat mtcars.csv | ./dplyr filter -c "mpg == 21"
###输出"mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb"21,6,160,110,3.9,2.62,16.46,0,1,4,421,6,160,110,3.9,2.875,17.02,0,1,4,4

再让我试一试输出mpg的值小于11的行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat mtcars.csv | ./dplyr filter -c "mpg < 11"
###结果"mpg","cyl","disp","hp","drat","wt","qsec","vs","am","gear","carb"10.4,8,472,205,2.93,5.25,17.98,0,0,3,410.4,8,460,215,3,5.424,17.82,0,0,3,4

选择名为 cyl的例,并输出前6行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./dplyr select --file mtcars.csv -c cyl | head -n 6

实例二:多个数据处理的参数的结合

创建名为 cyl2的新一列,它的值为 cyl的两倍,再提取 cyl值为8的行,最后使用 kable参数,在terminal输出类似表格的结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat mtcars.csv | \   ./dplyr mutate "cyl2 = 2 * cyl"  | \   ./dplyr filter "cyl == 8" | \   ./dplyr kable
###输出
|  mpg| cyl|  disp|  hp| drat|    wt|  qsec| vs| am| gear| carb| cyl2||----:|---:|-----:|---:|----:|-----:|-----:|--:|--:|----:|----:|----:|| 18.7|   8| 360.0| 175| 3.15| 3.440| 17.02|  0|  0|    3|    2|   16|| 14.3|   8| 360.0| 245| 3.21| 3.570| 15.84|  0|  0|    3|    4|   16|| 16.4|   8| 275.8| 180| 3.07| 4.070| 17.40|  0|  0|    3|    3|   16|| 17.3|   8| 275.8| 180| 3.07| 3.730| 17.60|  0|  0|    3|    3|   16|| 15.2|   8| 275.8| 180| 3.07| 3.780| 18.00|  0|  0|    3|    3|   16|| 10.4|   8| 472.0| 205| 2.93| 5.250| 17.98|  0|  0|    3|    4|   16|| 10.4|   8| 460.0| 215| 3.00| 5.424| 17.82|  0|  0|    3|    4|   16|| 14.7|   8| 440.0| 230| 3.23| 5.345| 17.42|  0|  0|    3|    4|   16|| 15.5|   8| 318.0| 150| 2.76| 3.520| 16.87|  0|  0|    3|    2|   16|| 15.2|   8| 304.0| 150| 3.15| 3.435| 17.30|  0|  0|    3|    2|   16|| 13.3|   8| 350.0| 245| 3.73| 3.840| 15.41|  0|  0|    3|    4|   16|| 19.2|   8| 400.0| 175| 3.08| 3.845| 17.05|  0|  0|    3|    2|   16|| 15.8|   8| 351.0| 264| 4.22| 3.170| 14.50|  0|  1|    5|    4|   16|| 15.0|   8| 301.0| 335| 3.54| 3.570| 14.60|  0|  1|    5|    8|   16|

实例三:设置aliases

通过设置aliases可以进一步方便我们调用这个工具,加快文件处理的速度。将下面的alias放到你.bashrc中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
alias mutate="dplyr mutate"alias filter="dplyr filter"alias select="dplyr select"alias summarise="dplyr summarise"alias group_by="dplyr group_by"alias ungroup="dplyr ungroup"alias count="dplyr count"alias arrange="dplyr arrange"alias kable="dplyr kable"

下面就来体验一下起飞的感觉:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat mtcars.csv | group_by cyl | summarise "mpg = mean(mpg)" | kable
###结果| cyl|      mpg||---:|--------:||   4| 26.66364||   6| 19.74286||   8| 15.10000|

简单的几个命令就将,根据cyl列的值来计算mpg平均值的任务执行好,并且输出到屏幕中。

实例四:连接两个文件

作者提到该功能还不是很完善,主要的缺陷有:

  • 用于连接命令后的第一个参数必须是现有文件,并且格式为(CSV或RDS)
  • 不能通过 by连接指定参数,因此两个文件必须只有一个共同的列才能链接

这里我们会链接 cyl.csv文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat cyl.csv
####
#  cyl,description#  4,four#  6,six

通过 inner_join命令来链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat mtcars.csv | dplyr inner_join cyl.csv | dplyr kable
###结果#  |  mpg| cyl|  disp|  hp| drat|    wt|  qsec| vs| am| gear| carb|description |#  |----:|---:|-----:|---:|----:|-----:|-----:|--:|--:|----:|----:|:-----------|#  | 21.0|   6| 160.0| 110| 3.90| 2.620| 16.46|  0|  1|    4|    4|six         |#  | 21.0|   6| 160.0| 110| 3.90| 2.875| 17.02|  0|  1|    4|    4|six         |#  | 22.8|   4| 108.0|  93| 3.85| 2.320| 18.61|  1|  1|    4|    1|four        |#  | 21.4|   6| 258.0| 110| 3.08| 3.215| 19.44|  1|  0|    3|    1|six         |#  | 18.1|   6| 225.0| 105| 2.76| 3.460| 20.22|  1|  0|    3|    1|six         |#  | 24.4|   4| 146.7|  62| 3.69| 3.190| 20.00|  1|  0|    4|    2|four        |#  | 22.8|   4| 140.8|  95| 3.92| 3.150| 22.90|  1|  0|    4|    2|four        |#  | 19.2|   6| 167.6| 123| 3.92| 3.440| 18.30|  1|  0|    4|    4|six         |#  | 17.8|   6| 167.6| 123| 3.92| 3.440| 18.90|  1|  0|    4|    4|six         |#  | 32.4|   4|  78.7|  66| 4.08| 2.200| 19.47|  1|  1|    4|    1|four        |#  | 30.4|   4|  75.7|  52| 4.93| 1.615| 18.52|  1|  1|    4|    2|four        |#  | 33.9|   4|  71.1|  65| 4.22| 1.835| 19.90|  1|  1|    4|    1|four        |#  | 21.5|   4| 120.1|  97| 3.70| 2.465| 20.01|  1|  0|    3|    1|four        |#  | 27.3|   4|  79.0|  66| 4.08| 1.935| 18.90|  1|  1|    4|    1|four        |#  | 26.0|   4| 120.3|  91| 4.43| 2.140| 16.70|  0|  1|    5|    2|four        |#  | 30.4|   4|  95.1| 113| 3.77| 1.513| 16.90|  1|  1|    5|    2|four        |#  | 19.7|   6| 145.0| 175| 3.62| 2.770| 15.50|  0|  1|    5|    6|six         |#  | 21.4|   4| 121.0| 109| 4.11| 2.780| 18.60|  1|  1|    4|    2|four        |

参考资料 https://github.com/coolbutuseless/dplyr-cli


每周文献分享

https://www.yuque.com/biotrainee/weeklypaper

肿瘤外显子分析指南

https://www.yuque.com/biotrainee/wes

生物统计从理论到实践

https://www.yuque.com/biotrainee/biostat


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Let's Encrypt 安装配置教程,免费的 SSL 证书
要求配置 DNS TXT 记录,从而校验域名所有权,也就是判断证书申请者是否有域名的所有权。
用户6884826
2021/07/09
4.2K0
SSL证书自动化如此简单-certbot实践
方式一:用指定根目录的方式,会在根目录下创建一个.well-known来验证域名的所有权
用户10002156
2024/01/05
8300
SSL证书自动化如此简单-certbot实践
如何在 CentOS 8 上使用 Let's Encrypt 保护 Nginx
Let’s Encrypt 是一个免费的,自动的,开源证书供应商,它由 Internet Security Research Group (ISRG)开发。
雪梦科技
2020/05/11
2.2K0
如何在 CentOS 8 上使用 Let's Encrypt 保护 Nginx
Docker获取Let`s Encrypt SSL 证书
为了方便维护、升级,同时也避免破坏本地的开发环境,我这里使用docker方式来运行certbot。整个过程分为两步:首次申请证书和证书更新。
孟斯特
2023/11/15
8210
设置私人 Burp 协作服务器
现在collaborator.config在/collaborator目录下创建一个文件并使用以下内容对其进行编辑。
Khan安全团队
2021/12/31
1.4K0
获取Let's Encrypt免费TLS/SSL证书的那点事儿
Let's Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。 -- 引自维基百科
用户1456517
2019/03/05
1.6K0
使用Let's Encrypt的SSL证书配置HTTPS手记
前段时间,看见很多大会都在分享全站HTTPS的经验。HTTPS固然好,前提是SSL证书,并且签发证书的机构要靠谱。沃通的CA证书就相继被Mozilla和Google封杀了。曾经对于普通用户,权威,安全,并且免费的证书无疑就像天上的星星,可望而不可及。现在,这些星星变成了馅饼掉了下来。没错,我们可以申请安全免费的ssl证书--- Let's Encrypt。 Let’s Encrypt是电子前哨基金会(EFF)发布的免费 SSL 证书服务,Google,Mozilla和Microsoft都极力支持。很早之前就
李海彬
2018/03/19
2.5K0
使用Let's Encrypt的SSL证书配置HTTPS手记
免费https证书安装(Nginx)
对于站点来说,使用https访问能增强数据传输的安全性,避免一些安全事故,同时拥有了https认证,在主流浏览器中都被被标记为可信任的安全的网站,也能加强搜索引擎的对https站点的收录。
肓己
2021/08/12
1.6K0
linux centos debain nginx自动ssl证书配置 软件 snapd
# sudo apt-get remove certbot、sudo dnf remove certbot或sudo yum remove certbot。
eisc
2022/03/06
1.2K0
在 CentOS 8 上使用 Let’s Encrypt 保护 Apache
Let’s Encrypt 是一个免费的,自动的,开放证书供应商。它由提供免费 SSL 证书的 Internet Security Research Group(ISRG)开发。
雪梦科技
2020/05/11
1.4K0
在 CentOS 8 上使用 Let’s Encrypt 保护 Apache
SSL证书申请与使用
描述:服务器CentOS7.x,Nignx,Let’s Encrypt做免费的HTTPS证书。 Let’s Encrypt官网: https://letsencrypt.org/ 操作流程:
全栈工程师修炼指南
2022/09/29
1.2K0
https证书
获取certbot wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto 安装nginx yum -y install nginx 生成证书 ./certbot-auto certonly --standalone --email syf@alexorz.com --agree-tos -d alexorz.com 查看生成的证书 ll /etc/letsencrypt/live/alexorz.com/privkey.pem lrwxrwx
零月
2018/04/25
2.7K0
https证书
Let’s Encrypt免费ssl证书申请
Let’s Encrypt是一个免费并且开源的CA,且已经获得Mozilla、微软等主要浏览器厂商的根授信。它极大低降低DV证书的入门门槛,进而推进全网的HTTPS化。
爱游博客
2019/08/07
4.2K0
如何在Ubuntu 16.04上使用Let加密SSL证书配置GoCD
GoCD是一个功能强大的持续集成和交付平台,旨在自动化测试和发布流程。GoCD具有许多高级功能,例如比较构建,可视化复杂工作流以及自动构建版本跟踪,是一种灵活的工具,可以帮助团队将经过良好测试的软件提供给生产环境。
编程男孩
2018/09/21
1.3K0
使用Let's Encrypt -- 免费的https证书
老高的证书快过期了(2016-12-11),本着节约资(R)源(MB)的精神,准备使用Let's Encrypt。
老高的技术博客
2022/12/27
1.2K0
使用Let's Encrypt  -- 免费的https证书
快速配置Let's encrypt通配符证书
利用certbot工具配置Let’s encrypt通配符证书,所域名下所有的子域名都能方便的使用 https证书,而且完全免费。值得关注的是,Let’s encrypt通配符证书只是针对二级域名,并不能针对主域名,如*.hubinqiang.com和hubinqiang.com 被认为是两个域名,如果和我一样使用的是主域名,在申请的时候需要注意都要申请。
OwenZhang
2021/12/08
2.2K0
快速配置Let's encrypt通配符证书
nginx HTTPS反向代理
configure arguments里的with-http_ssl_module是必须的,在./configure时必须添上该选项启用ssl模块,否则比较麻烦(没有类似于phpize这种东西,只能添上参数重新编译按需覆盖)
ayqy贾杰
2019/06/12
3.4K0
certbot免费证书-1:centos7部署并申请免费证书certbot
我们需要在zenlayer,aws-lb上配置certbot证书,因为是免费的,便宜。
千里行走
2022/08/31
1.9K0
certbot免费证书-1:centos7部署并申请免费证书certbot
CentOS7-Nginx配置Let's-Encrypt-SSL证书
为http站点添加https支持,需要从证书发行机构获取SSL/TLS 证书。常见的免费证书有两种:
职场亮哥
2020/10/10
2.2K0
使用 Certbot 安装 Letsencrypt 证书
1、拥有一个域名,例如 mydomain.com 2、在域名服务器创建一条A记录,指向云主机的公网IP地址。例如 demo.mydomain.com 指向 192.168.0.1 的IP地址 3、要等到新创建的域名解析能在公网上被解析到
SkyRiN
2018/11/20
4.7K0
推荐阅读
相关推荐
Let's Encrypt 安装配置教程,免费的 SSL 证书
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档