百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

R语言从入门到精通:Day5

bigegpt 2024-08-16 14:15 2 浏览

原创 小浣熊 科研猫


是时候关注我们一波了


经过前面几次推文的学习,相信大家对R语言已经有了一个大概的了解,同时也初步感受了R语言在数据处理领域的强大功能,不过实话实说,前面的内容还只是R语言应用的冰山一角而已。从这次推文开始,我们就要正式开始接触R语言对数据处理的强大能力。


在正文内容开始之前,我先给大家推荐一个文档https://google.github.io/styleguide/Rguide.xml


相信很多同学在前几次推文的指导下,练习R代码编写的时候会发现,R语言和其他编程语言不太一样的地方,比如:<- 和 = 都可以给变量赋值,两者都可以作为赋值符,两者我该用哪个?同时,有些操作符前后有空格,有些又没有,到底该怎么写才对?除此之外,R语言的换行和缩进似乎也不像python那么严格。那我们平时自己写代码的时候应该遵循什么样的规则呢?


上面提到的这个文档就可以解答大家的这些疑问。这个文档是Google’s R Style Guide,众所周知,医生在临床上工作有临床指南,那程序员工作也有“指南”,上面的这个文档就是我们写R代码的指南。具体我这里不展开来讲,希望大家好好看看,务必遵守!!!


话不多说,我们进入这次课程的主要内容,上节课中完成了R语言中的数据导入工作,那么这次课程的主要内容就是给大家介绍一些数据管理和操作的基本函数或语句。


温馨提示

1、本节内容重点内容较多,

务必紧跟红色标记。

2、测试数据及代码

见文末客服小姐姐二维码。


1.创建新变量

一般来说,创建新变量是项目中必不可少的步骤。举个例子,有一个数据框mydata,其中有两列变量x1,x2。现在要求创建两个新的变量x3,x4,其中x3是变量x1,x2的加和,x4是x1,x2的均值。下面有三个实现方式的示例:

图1:创建新变量的三种方式。


第一种方法是通过赋值操作在数据框mydata中生成新的两列;第二种方法是通过attach函数加载mydata,赋值生成新的两列数据,再detach取消加载mydata数据框;第三种方法是通过transform函数把数据列合并在一起。大家可以根据自己的习惯来选择其中一种方法实现(跟大家讲个悄悄话:我喜欢第一种方法,直接明了)。同时我们也跟大家讲一下R里面的常用运算符:加(+)、减(-)、乘(*)、除(/)、求幂(^或者**)、求余(%%)、整数除法(%/%,如5%/%2=2)。


2.变量的重编码和重命名

变量的重命名很好理解,变量的重编码的含义是根据一个或者一组变量的现有值创建新值的过程,比如,项目中要求将错误的数据改为准确值、将学生的百分制成绩改为等级制成绩等等。这个过程中逻辑运算发挥了很重要的作用。说到逻辑运算,就是对TRUE和FALSE两个逻辑变量的运算,逻辑运算符包括&(与)、| (或)、!(非)三种。我们以如图2中的一组数据来进行示范。

图2:示例数据


首先我们把age=99的数据改为缺失数据,然后将age重编码为等级制变量agecat,代码如图3。

图3:变量的重编码

这样我们发现处理完之后数据有了变化:

图4:注意最后一列agecat。

实际上变量重编码是一个很复杂的问题,绝不仅仅是像上面两步操作那么简单的。其中,car包中的recode()和doBy包中的recodevar()、R语言中自带的cut(),这三个函数都是很受欢迎的变量重编码函数。


相比于重编码,重命名就不那么神秘了,通过names()函数可以更改数据框的行名和列名。下面给大家举几个变量重命名的方法,大家可以自己动手试一下,感受一下这三个语句的效果。

图5:变量重命名的方法。

*plyr包是一个集合了很多数据集操作函数的R包,大家可以查看其帮助文档进一步学习。


3.R中缺失值的标记、重编码和排除

几乎所有项目中,都存在缺失值,在R中缺失值用NA代替(前面我们已经见过了)。R语言提供了一个简单而重要的函数is.na()来监测数据集中的缺失值。下面是该函数的一个使用实例。

图6:使用is.na()函数

数据集leadership中缺失值NA的位置都被标记上了TRUE。


这个函数简单在于用法简单易记,重要在于R语言中不存在x == NA来判断变量x是否为缺失值的用法!!!值得一提的是,NA只是表示缺失值,和无效运算产生的结果NaN是不一样的。


我们在前面已经实验过了重编码某些值为缺失值的用法,就是将age为99的值标记为缺失值的步骤(如图3)。这一步虽然很简单,但在一些项目中如果遗漏了这个步骤,会对结果产生巨大的影响!


在识别和编码了缺失值之后,我们该怎么处理这些可恶的缺失值呢?缺失值的插补是一个非常复杂的问题,如果你的数据有很大一部分都是缺失值,你或许应该先去问问提供数据的人,为什么会有缺失值。或者,等我们后续课程专门讲解缺失值插补的操作。如果你的数据中只是存在很小一部分缺失值,直接删除这些麻烦的缺失值是一个理想的选择。R语言中提供了函数na.omit()来删除带有缺失值的行(如图7)。

图7:函数na.omit()的使用。

在R语言中的很多数值函数都有一个na.rm=TRUE的可选参数,比如函数sum()。这个参数可以在计算之前就移除缺失值并使用剩余值计算(如图8)。

图8:函数sum()中na.rm=TRUE的举例

总之,缺失值的处理是一个很复杂的问题,在删除缺失值对总体影响很小的情况下,这是最理想的选择。


4.日期和数据的类型转换

学过任何一门编程语言的同学都不会对数据类型陌生,有些语言中的数据类型转换甚至难倒了很多人。R语言中不会出现这种情况了,它为我们提供了一系列用来判断某个对象的数据类型和将其转换为另一种数据类型的函数,如图9。

图9:类型判断与转换函数。

下面图10是一个简单的示范。

图10:数据类型判断和转换函数的使用

数据中比较特殊的一类就是日期数据,R语言中日期值通常以字符串的形式输入,然后转换为数值形式存储。类似上面用到的as.datatype()函数,函数as.Date()用于执行这个转换过程,具体用法为:as.Date(x, “input_format”)。参数input_format给出读入日期x的适当格式。具体用法见下图11。日期格式的列表如图12,表中详细罗列了不同日期格式的格式符号。

图11:日期的转换

图12:日期格式

5.数据的排序

数据的排序在R语言中可以说比在Excel中还要简单了,简单给大家展示一下函数order()的用法。如图13,分别按照age和同时按照gender、age对leadership数据集进行了排序。此外,排序的函数还有sort()和rank(),可以自制试试看不同函数的用途哦。

图13:函数order()的用法。


6.数据集的按行、按列合并

有时候数据并不是一个整体,需要自己整合一下。R语言中常用的合并数据集的函数有merge()、cbind()rbind()。其中函数cbind()是将两个矩阵或者数据框直接横向合并,要求被合并的两个对象有同样的行数。


如果要在数据框中添加行(或者理解为将两个数据框纵向合并),使用函数rbind(),要求两个数据框有相同的变量,不过顺序不必要相同。一般用于向数据框中添加新的观测。


函数merge()的用法就稍微复杂一点,下面还是用leadership数据集给大家举一个简单的例子,如图14。

图14:函数merge()的使用

简单来说,就是把leadership和leadership.new两个数据集按照变量managerID、date进行了合并,用于给观测添加新的数据。


7.数据集取子集

在前面介绍R语言中数据类型的推文中我们已经展示过选择数据框中某几列数据的方法,下面我们为大家展示选择或者剔除变量(观测)的几种常用方法。如图15.

图15:数据取子集的操作实例。


篇幅有限,就不给大家展示代码的运行结果了。图里面值得注意的是%in%这个运算符,它的主要功能是判断一个向量中的元素是否在另外一个向量中。还有一个重点就是函数subset()。这个函数可以独立解决取一部分观测和一部分变量的工作,是数据集取子集最简单的方法了。


小结

相信大家都有体会,我们的难度在逐渐增大。本次课程的重点是R中的常用数据操作,这个是数据挖掘的基础,其实说难也不难,掌握几个函数,后面的操作就简单多了。希望大家不要气馁,坚持学习,精通R语言指日可待哦。


本期干货

·

!R语言数据操作示例及数据!



科研猫公众号,国内外顶尖高校博士及PI联手打造的科研共享中心,涵盖生物信息、实验技能、统计绘图等内容的一体化平台,不断放送科研干货,现已推出《R语言入门》、《科研绘图》、《生物信息数据挖掘》、《机器学习》等多个系列,广受粉丝欢迎。

团队开发的Hiplot绘图系统也受到科研人员的极大赞赏,日点击率达到上万人次。

https://hiplot.com.cn


关注公众号后,

回复【hiplot】可获取注册激活码,免费成为hiplot会员,实现一键作图;

加客服微信可免费领取科研干货。

科研干货示例

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...