ggplot2箱式图两两比较_R语言进阶笔记2 | 长数据与ggplot2

1. 长数据是什么鬼?

之前介绍了如何将多个性状的箱线图放在一个图上,比如learnasreml包中的fm数据,它有h1~h5五年的株高数据,想对它进行作图。

「数据预览:」

> library(learnasreml)
> data(fm)
> head(fm)
  TreeID Spacing Rep   Fam Plot    dj    dm    wd h1  h2  h3  h4  h5
1  80001       3   1 70048    1 0.334 0.405 0.358 29 130 239 420 630
2  80002       3   1 70048    2 0.348 0.393 0.365 24 107 242 410 600
3  80004       3   1 70048    4 0.354 0.429 0.379 19  82 180 300 500
4  80005       3   1 70017    1 0.335 0.408 0.363 46 168 301 510 700
5  80008       3   1 70017    4 0.322 0.372 0.332 33 135 271 470 670
6  80026       3   1 70002    2 0.359 0.450 0.392 30 132 258 390 570

这里,相对h1,h2,h3,h4,h5这五个性状进行作图,我们可以将其转化为「长数据」

问题来了,什么是「长数据」,什么是「宽数据」(不是短数据,这不是反义词,谢谢)

「宽数据:」

即变量是多列数据,每一列都是一个值,比如株高数据,第一年的株高是一列,第二年的株高是一列,第三年的株高是一列,这些数据就是宽数据。

ID2018height2019height2020heightt
ID001121418
ID002111419
ID003141516

「长数据:」

即变量是,数据都在一列,比如株高数据,第一列是ID,第二列是年份,第三列是株高,这种数据叫长数据。

ID年份株高
ID001201812
ID001201914
ID001202018
ID002201811
ID002201914
ID002202019
ID003201814
ID003201915
ID003202016

「tidyverse」系列包,喜欢长数据,无论是清洗数据,还是汇总统计,还是ggplot2可视化,都喜欢长数据。

飞哥注:我今天明白了这个道理,即tidyverse系列喜欢长数据,感觉打开了任督二脉,对于数据处理又有了新的理解。

2. 怎么转化为长数据

我知道三种方法:

  • reshape2的melt函数,现在还知道这个包的人,R龄应该在5年以上了,反正我一直都用,很好用,但是被作者嫌弃了,现在被很多人嫌弃了……
  • data.tablemetlt函数,和reshape2包的函数同名,用法也相似,可以对DT数据处理,很快。现在我用melt函数时,就不用载入reshape2了,直接用data.table包就行
  • tidyverse中的tidyr中的pivot_longer函数,这个更简单,用过这个函数,再也没有迷路过。因为melt函数语法比较复杂,经常需要查看帮助文档或者以前的笔记。

看一下最简单的方法吧,看一下数据:

> dd = fm[,c(1,9:13)]
> head(dd)
  TreeID h1  h2  h3  h4  h5
1  80001 29 130 239 420 630
2  80002 24 107 242 410 600
3  80004 19  82 180 300 500
4  80005 46 168 301 510 700
5  80008 33 135 271 470 670
6  80026 30 132 258 390 570

然后用pivot_longer函数,将其转化为长数据:

> re = dd %>% pivot_longer(.,-1,names_to = "Year",values_to = "Height") 
> head(re)
# A tibble: 6 x 3
  TreeID Year  Height
      
1 80001  h1        29
2 80001  h2       130
3 80001  h3       239
4 80001  h4       420
5 80001  h5       630
6 80002  h1        24

代码解释:

  • 我用了管道符%/%,将数据传递给pivot_longer
  • 第二个-1,意思是除了第一个不处理,其它都处理,也可以用2:6表示第二到第六列处理
  • 第三个names_to是变量的名称,这里定义为Year
  • 第四个values_to是保存的性状名,这里是Height

可以看到,长数据有3列,分别是:

  • TreeID
  • Year
  • Height

3. ggplot2作图怎么搞

之前我使用ggplot2作图时,想做什么图,就在网上copy代码,然后根据自己的数据名称,修改代码,然后运行代码。一次性代码,用过就忘,半吊子水平,一直很稳定。

当我知道了ggplot2用长数据之后,又是另一种理解:

library(ggplot2)
re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) + geom_boxplot()

先看图片:

1a6cf4ce371a4342960bf9f100b54802.png

成功了,图片比较满意,第一个是h1的株高,第二个是h2的株高,依次类推。但是代码是什么意思呢?

我看了ggplot2的入门,画图分为三个部分:

  • 数据在哪里:re是数据
  • x轴,y轴在哪里:x轴是Year,y轴是Height
  • 画什么类型的图:这里是箱线图,所以是geom_boxplot

「如果是画分组散点图:」

re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) + geom_point()
822bc72ccc33705dbf5d701adfb8cf74.png

「如果是画分组分散的散点图:」

re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) + geom_jitter()
8dd30a81f927bd0dc3143008ab0c038e.png

4. 所以散点图和箱线图结合呢?

直接用+连接就行了,感觉到了画家作图的快乐,算是丫丫学徒吧,哈哈

re %>% ggplot(.,aes(x = Year, y = Height, colour = Year)) +  geom_jitter() + geom_boxplot()
27c54cc1a4964d029e7edd9c9130128b.png

5. 感受

所以,这就是学习的快乐了!

R语言进阶笔记1 | 深挖一门语言的必要性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象,C语言实现简单工厂模式,思路+代码

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删1、简介简单工厂方法定义一个用于创建对象的类,该类接受一个参数,通过参数决定创建不同的对象。GOF并没有把简单工厂方法…

javaone_JavaOne和OOW 2015总结

javaone大家好! 终于,我回来了一个很棒的JavaOne和OOW2015。在这篇文章中,我想分享我的经验,一些照片和我参加的演讲的摘要。 会议前 我于2015年6月24日星期六乘Copa航空公司CLO-PTY-SFO飞往旧金山。 从哥伦比亚出发(…

如何导出久其报表所有数据_如何选择好的HR软件

相信HR朋友想要换HR系统的时候,一般都会在百度、360和搜狗上找,或者通过朋友介绍,而自己百度找的时候,就会出现很多HR软件的广告,一个一个的去问,也不一定能问出所以然,所以就约着面谈&#xff…

网站快速变灰色,几行代码就搞定了!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删自从伟大的江爷爷走了后,全站和各个App的内容都变成了灰色,包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢&…

java 递归 堆栈_Java中的堆栈安全递归

java 递归 堆栈在本文中,摘自《 Java中的函数编程 》一书,我解释了如何使用递归,同时避免了StackOverflow异常的风险。 Corecursion正在使用第一步的输出作为下一步的输入来构成计算步骤。 递归是相同的操作,但是从最后一步开始。…

cshtml中引用css_css基础必备-使用样式,前端小白一看就会

在HTML文档中包含CSSCSS可以作为单独的文档引用,也可以嵌入到HTML文档中。在HTML文档中包含CSS有三种方法:内联样式 - 使用元素起始标记的style属性指定样式嵌入样式 - 在文档的head部分使用style标记指定样式外部样式 - 在文档的head部分使用link标记引…

嵌入式软件分层框架设计,举个例子

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删前言为了能够使得产品得到更好的开发速度与以后更好的迭代和移植,框架分层是很有必要的。但如对于中小型项目严格遵循这些原则&#…

腾讯大举退出美团!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删11月16日,腾讯发布第三季度财报,同时表示将“分红式减持”美团。腾讯分派90.9%美团持股 腾讯系中概股美股盘前多数下跌腾…

matchers依赖_Hamcrest Matchers教程

matchers依赖本文是我们名为“ 用Mockito测试 ”的学院课程的一部分。 在本课程中,您将深入了解Mockito的魔力。 您将了解有关“模拟”,“间谍”和“部分模拟”的信息,以及它们相应的存根行为。 您还将看到使用测试双打和对象匹配器进行验证…

谷歌开源替代 C++ 的编程语言:Carbon

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删谷歌工程师 Chandler Carruth 近日在多伦多举办的 CppNorth 大会上宣布①,正式开源谷歌内部打造的编程语言:Carbon&#…

C语言灵魂拷问:++i为何比i++执行效率高!有何区别?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删背景相信很多人遇到过这样的问题:printf("%d,%d",i,i);也纠结过这个问题,到底答案是什么。确没有一个参考的资…

指标实现层级_企业如何构建核心指标系统,实现业务运营效率提升90%?

本文为帆软数据生产力大赛获奖案例,未经授权禁止转载。01企业简介西安怡康医药连锁有限责任公司成立于2001年,总部设在西安市大庆路副24号,是一家由零售连锁药店发展起来的大型医药连锁企业,除药品零售外,同时兼营药品批发与器械批…

学生时代,你有遇到过像我这样理解C语言的吗?

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删今天我讲一下我个人对C语言的认识以及自己的理解,若有错误,还望指出,不甚感激。首先是C语言整体的脉络&#…

scrapyd部署_第八章 第一节 scrapyd和scrapy-client

如果觉得文章对您产生帮助的话, 欢迎关注Python开发之路(微信公众号: python-developer), 及时获取更多教程假设有我们做了一个项目是抓取很多网站(每个网站对应一个爬虫), 需要分别部署到不同的服务器上(单台扛不住), scrapy官方也提供了一种部署工具scrapyd。这个工具是用来将…

C++ 首超 Java,与 Python、C语言共角逐年度最佳编程语言奖!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删最新的 TIOBE 12 月编程语言已发布,先来预测一波今年的年度编程语言大奖究竟会花落谁家吧?C 首超 Java和上个月相比&…

乔安监控云存储能存多长时间_干货 | 监控磁盘阵列知识介绍,不了解还不来看看?...

一、磁盘阵列的概念要定义磁盘阵列的概念,是一个简单的工作,因为这个概念已经形成了共识——磁盘阵列(DiskArray)是由一个硬盘控制器来控制多个硬盘的相互连接,使多个硬盘的读写同步,减少错误,增加效率和可靠度的技术。…

我要是在学习 C 语言之前知道这些就好了!

点击蓝字关注我们因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络,侵删对于我来说,学习 C 语言好难啊。这门语言本身的基础知识并不是很难,但是“用 C 语言编程”需要用到各种知识,…

opencv yuv保存本地_OpenCV-dlib-python3实现人脸戴墨镜和含Y的抖音效果

1 说明:1.1 吸烟有害健康!!纯属娱乐和学习python的相关知识。1.2 虽然是娱乐,但是opencv、dlib和python在人工智能、人脸识别、自动化等有很大作用,目前已经或者未来会有更多的应用,作为一名普通人&#xf…

为什么永远不会有语言取代 C/C++?

关注星标,每天学习C语言新技能因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享来源:网络数以百计的 C/C 替代品将会出现,但 C/C 将永远与我们同在!每个 CPU 都带有一种称为 ISA(指…

qt 表格中插入一行_在EXCEL表格中,快速插入多行、多列的技巧

在使用Excel过程中,我们会遇到需要插入相同格式的多行或多列,如果一行行或一列列的插入,对于插入的数量较少的情况还是适用的。可是如果需要插入上百的行或列,使用此方法就比较费时费力啦。分享几个小技巧实现快速插入多行或多列.…