R语言 | 数据分析与处理

news2025/2/28 15:41:05

目录

一、随机抽样

1.1 将随机抽样应用于扑克牌

1.2 种子值

​1.3 模拟骰子

1.4 比重的设置

二、再谈向量数据的抽取——以islands为实例

三、数据框数据的抽取——重复值的处理

​3.1 重复值的搜索

3.2 which()函数

3.3 抽取数据是去除重复值

四、数据框数据的抽取——缺少值的处理

4.1 抽取数据时去除含NA值得行数据

4.2 na.omit()函数

五、数据框的字段运算

5.1 基本数据框的字段运算

5.2 with()函数

5.3 identical()函数

5.4 将字段运算结果存入新的字段

5.5 within()函数

 六、数据的分割

6.1 cut()函数

6.2 分割数据时直接使用labels设定名称

​6.3 了解每一人口数分类有多少州

七、数据的合并

7.1 之前的准备工作

​7.2 merge()函数使用于交集合并的情况

7.3 merge()函数使用于并集合并的情况

7.4 merge()函数参数"all.x=TRUE"

7.5 merge()函数参数"all.y=TRUE"

7.6 match()函数

7.7  %in%

7.8 match()函数结果的调整

 八、数据的排序

8.1 之前准备工作

8.2 向量的排序

8.3 order()函数

8.4 数据框的排序

8.5 排序时增加次要键值的排序

8.6 混合排序与xtfrm()函数

九、系统内建数据集mtcars

十、aggregate()函数

10.1 基本使用

10.2 公式符号

十一、建立与认识数据表格

11.1 认识长格式数据与宽格式数据

11.2 reshape2扩展包

11.3 将宽格式数据转成长格式数据:melt()函数

​11.4 将长格式数据转成宽格式数据:dcast()函数


一、随机抽样

在R语言中,可以使用sample()函数,轻易地从一堆数据中抽取样本,这个函数的使用格式如下:

sample(x,size,replace=FALSE,prob=NULL)
  • x:向量,代表随机数样本的范围。
  • size:正整数,代表取随机样本的数量。
  • replace:默认是FALSE,如果是TRUE,则代表抽完一个样本后这个样本需放回去,供下次抽取。
  • prob:默认是NULL,如果想将某些样本被抽取的概率增大,则可在这个参数中放置数值向量,代表样本被抽中的比重。

1.1 将随机抽样应用于扑克牌

这个实例每次执行均会有不同的输出结果。

1.2 种子值

set.seed()函数可用于设定种子值,set.seed()函数的参数可以是一个数字,当设置种子值后,在相同种子值后面的sample()所产生的随机数序列将相同。

对上述程序而言,每次执行均可以获得相同的扑克牌出牌顺序。在set.seed()函数中放置不同的参数会有不同的出牌顺序。

 1.3 模拟骰子

骰子由1到6组成,如果我们想要掷12次,同时记录结果,可以使用下列方法:

在上述程序中,由于每次掷骰子必须重新取样,所以replace参数需设为TRUE,可以想成将抽取的样本放回去,然后重新取样。当然设置种子值得方法也适合应用于掷骰子取样。

1.4 比重的设置

如果在取样时,希望某些样本有较高的概率被抽取,可更改比重。

上述程序表示。掷骰子时,1和6设有5倍于平均的比重被随机抽中。

二、再谈向量数据的抽取——以islands为实例

三、数据框数据的抽取——重复值的处理

 iris是系统内建的数据框数据集,内含150个记录。

数据框是一个二维的对象,所以在抽取数据时索引须包括行和列

由上述执行结果可以发现,iris原是数据框数据类型,经上述抽取后,由于是单列的数据,所以数据类型被简化为向量,如果想避免这类情况发生,可以在抽取数据时增加参数“drop=FALSE"。

 上述只列出部分结果。

 

 3.1 重复值的搜索

使用duplicated()函数可以搜寻对象是否有重复值,数值在第一次出现时会返回FALSE,未来重复出现时则传回TRUE。

这个函数如果应用于数据框,则必须该行内所有数据与前面某行所有数据重复才算重复。

由上述执行结果,可以发现第143行数据返回TRUE,所以这行数据是重复出现的。

3.2 which()函数

which()函数可以传回重复值的索引

 3.3 抽取数据是去除重复值

有两个方法可以在抽取数据时去除重复值,方法1是使用负值索引

 如果往下滚动屏幕,则可以看到下列输出结果:
 从上述执行结果中可以看到,第143行数据已被去除。

方法2是直接使用逻辑运算语句

如果往下滚动屏幕,可以看到下列输出结果:

 由以上执行结果可以看到第143行数据已被去除。

四、数据框数据的抽取——缺少值的处理

在真实的世界里,有时候无法收集到正确信息,此时可能用NA代表缺少值。

4.1 抽取数据时去除含NA值得行数据

R语言系统有一个内建的数据集airquality,它的数据如下所示:(仅展示部分数据)

  

 以下是使用str()函数了解其结构。

由以上执行结果可以知道airquality是数据框对象,也可以看到上述对象含有许多NA值。R语言提供了complete.cases()函数,如果对象的数据行是完整的则传回TRUE,如果对象数据含NA值则传回FALSE。

 如果往下滚动屏幕,可以看到下列结果:

 由上述执行结果可以看到,x.NaNA对象将不再含有NA的数据了。以下使用str()函数了解新对象的结构。

可以看到,原先有153行数据,最后只剩下111行数据了。

4.2 na.omit()函数

使用na.omit()函数也可以实现上一节的功能。

五、数据框的字段运算

对于数据框而言,每一个字段(列数据)皆是以恶向量,所以对于字段之间的运算,也可以视之为向量的运算。

5.1 基本数据框的字段运算

5.2 with()函数

在执行数据框的字段运算时,”数据框名称“加上"$",的确好用,但是with()函数可以省略"$"符号,甚至也可以省略数据框的名称。这个函数的使用格式如下:

with(data,expression,...)

 data:待处理的对象。

expression:运算公式。

对于上述示例,当R语言遇上with(iris,...)时,编译程序就知道后面的运算公式,是属于iris字段,因此运算公式可以省略对象名称,此例是省略iris。

5.3 identical()函数

identical()函数的基本作用是检测两个对象是否完全相同,如果完全相同则返回TRUE,否则返回FALSE。

5.4 将字段运算结果存入新的字段

 既然我们可以将运算结果存入1个向量内,那么我们也可以将数据框字段的运算结果存入该数据框内称为一个新的字段。

5.5 within()函数

within()函数主要用于在字段运算时将运算结果放在相同对象的新建字段上。

 六、数据的分割

6.1 cut()函数

cut()函数可以将数据等量切割,切割后的数据将是因子数据类型

看到上述用科学符号表示的数据。其实方法是将人口最多的州,减去人数最少的州,再均分成5等份。

6.2 分割数据时直接使用labels设定名称

6.3 了解每一人口数分类有多少州

七、数据的合并

7.1 之前的准备工作

本节所使用的实例仍将采用R语言系统内建的数据集state.x77,这是一个含有行名称及列名称的矩阵。

7.2 merge()函数使用于交集合并的情况

所谓交集状况是指两个条件皆符合,这个函数的基本使用格式如下:

merge(x,y,all=FALSE)

 x,y是要做合并的对象,默认情况是“all=FALSE",所以若省略这个参数则是代表执行的是交集的合并。

 7.3 merge()函数使用于并集合并的情况

所谓并集是指两个条件有一个符合即可,此时需将参数”all=FALSE"设定为"all=TRUE"。

 在做并集合并的过程中,原先字段不存在的数据将以NA值填充。

7.4 merge()函数参数"all.x=TRUE"

参数"all.x=TRUE",x是指merge()函数的第一个对象,使用merge()函数时若加上这个参数,则代表所有x对象的数据均在这个合并结果内,在合并结果内中原属于y对象的字段,原字段不存在的数据将以NA值填充。

7.5 merge()函数参数"all.y=TRUE"

参数"all.y=TRUE",y是指merge()函数的第二个对象,使用merge()函数时若加上这个参数,则代表所有y对象的数据均在这个合并结果内,在合并结果内中原属于x对象的字段,原字段不存在的数据将以NA值填充。

7.6 match()函数

match()函数类似于两个对象的交集,完整解释应为,对第一个对象x的某行数据而言,若在第二对象y内找到符合条件的数据,则返回第二个对象相应数据的所在位置(可想成索引值),否则返回NA。所以调用完match()函数后会返回一个与第一个对象x的行数长度相同的向量。

7.7  %in%

使用"%in%"符号可以实现类似于前一小节match()函数的功能,不过这个符号将返回与第一个对象长度相同的逻辑向量,在向量为TRUE的元素表示我们想要的数据。

经上述实例后,对"%in%"符号更完整的解释是,当第一个对象在第二个对象内找到符合条件的值时,则传回TRUE,否则传回FALSE。

7.8 match()函数结果的调整

match()函数传回的结果时一个向量,其实也可以使用!is.na()函数,将它调整为逻辑向量。

 八、数据的排序

8.1 之前准备工作

8.2 向量的排序

8.3 order()函数

order()函数也是一个排序函数,这个函数将返回排序后向量的每一个元素在原向量中的位置(索引)

8.4 数据框的排序

上述执行结果中,整个数据框已依照Income字段执行递增排序了。

 上述执行结果中,整个数据框已依照Income字段执行递减排序了。

8.5 排序时增加次要键值的排序

在真实应用中,我们可能会面临当主要键值排序相同时,需要使用次要键值作为排序依据的情况,此时就要在order()函数内,将次要键值的字段名当作第二参数即可,此时order()函数的使用格式如下:

order(主要键值,次要键值,...)  # "..."表示可以有更多其他更次要的键值

 

对因子而言order()函数的排序,相当于是执行Level排序。

 8.6 混合排序与xtfrm()函数

有时候我们可能会想要对部分字段进行递增排序,对部分字段进行递减排序,此时可以使用xtfrm()函数。这个函数可以将原向量转成数值向量,当你想要以不同的方式排序时,只要在xtfrm()函数前加上减号(“-”)即可。

九、系统内建数据集mtcars

mtcars数据集是各种汽车发动机数据,可用str()函数了解其结构。

mpg:表示每加仑油可行驶的距离。

cyl:气缸数,有4、6和8三种气缸数。

am:0表示自动挡,1表示手动挡。 

 

 

 

 十、aggregate()函数

10.1 基本使用

aggregate()函数的使用格式与tapply()函数类似,但是tapply()函数可以返回列表,aggregate()函数则返回向量、矩阵或数组,它的使用格式如下:

aggregate(x,by,FUN,...)
  • x:要处理的对象,通常是向量变量,也可是其他数据类型。
  • by:一个或多个列表变量。
  • FUN:预计使用的函数。
  • ...:FUN函数所需的额外参数。

  

10.2 公式符号

本节的重点公式符号指的是统计学的符号,下列是一些基本的公式符号的用法。

y~a:y是a的函数。

y~a+b:y是a和b的函数。

y~a-b:y是a的函数但排除b。

十一、建立与认识数据表格

 首先建立一个数据框。

11.1 认识长格式数据与宽格式数据

长格式和宽格式基本上是指相同的数据使用不同方式呈现的效果。

宽格式数据如下:

长格式数据如下:

11.2 reshape2扩展包

reshape2扩展包的主要功能是可以简单地让你执行长格式和宽格式数据的转换。

11.3 将宽格式数据转成长格式数据:melt()函数

在reshape2扩展包中,将宽格式数据转成长格式数据被称为融化(melt),reshape2函数提供了melt()函数可以执行此任务,这个函数基本使用格式如下:

melt(data,...,id.vars="id.var",variable.name="variable",value.name="value")
  • data:宽格式对象。
  • id.vars:字段变量名称,如果省略,系统将自动抓取宽格式字段,一般也可满足需求。
  • variable.name:设定variable字段变量名称,默认是"variable"。
  • value.name:设定value字段变量名称,默认是"value"。

11.4 将长格式数据转成宽格式数据:dcast()函数

在reshape2扩展包中,将长格式数据转成宽格式数据称重铸(cast),reshape2扩展包有提供dcast()函数可以执行此任务,这个函数是用于数据框数据的,其使用格式如下所示:

dcast(data,formula,fun.aggregate=NULL,...)
  • data:长格式对象。
  • formula:这个公式将指示如何重铸数据。
  • fun.aggregate:利用公式执行数据重组时所使用的计算函数,常用的计算函数有sum()和mean()。

 注:reshape2扩展包有提供acast()函数,使用于数组数据,将长格式转换成宽格式。

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

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

相关文章

Linux命令·scp

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。当你服务器硬盘变为只读 read only system时&#xff0c…

【深度学习】第一门课 神经网络和深度学习 Week 2 神经网络基础

2.1 二元分类 前言 第二周的主题是学习神经网络的基础知识。 实现神经网络需要用到一些重要的技术和技巧,比如怎样处理包含大量样本的训练集。 在神经网络的计算中,还会有前向暂停、前向传播、反向暂停和反向传播等步骤,本周会对它们进行…

面试一个6年经验测试员:一年经验硬生生用了六年....

在众多面试中,对于那个工作了6年的面试者,我印象很深刻,因为最开始拿到简历的时候,我一摸:"这简历,好厚啊!"再一看,工作6年。 于是我去找了我的领导,我说:“这人我应该没…

C++入门基础知识总结(超详细)

目录 C入门基础知识之什么是C? C入门基础知识看看C的历史版本: C入门基础知识关键字 C入门基础之C的命名空间 C入门基础命名空间的使用 C入门基础知识的输入和输出 C入门基础知识-缺省参数 C入门基础-C函数重载 extern “C” C入门基础知识-引用 C入门基…

图像处理:图像增广算法

目录 前言 图像增广算法 a.图像旋转 b.图像亮度调整 c.图像裁剪及拼接 实验分析 本章小结 前言 图像增广算法在计算机视觉领域扮演着至关重要的角色。随着深度学习的兴起,大规模数据集的需求变得更加迫切,而图像增广算法可以通过对原始图像进行一…

手把手教你安装PaddleDetection(最新CUDA11.7版本)

前言 本文记录一下在linux系安装PaddleDetection的过程,使用Conda的方式来安装; (尝试过docker的方式,无法获取镜像;尝试过pip的方式,提升找不到库;最终使用Conda成功安装了。) 目…

什么是中国版软件能力成熟度之CSMM

当前,中国软件产业蓬勃发展,产业增速迅猛,发展韧性和潜力进一步凸显。由于我国长期缺乏相关的自主标准,20多年来国外标准在我国软件评估领域占据主导地位,不仅阻碍了我国自主产业发展,甚至通过评估等手段可…

【STM32CubeMX项目】小时钟V1.0

前言 基于STM32CubeMxSTM32F103C6T6编写时钟功能。现在以及能实现时钟的简单功能,做文记录下。还有很多可以改进的地方,也算留下的基础版本下来备份吧。我愿称之为V1.0版本。可供学习参考。 实物 引脚接线: OLED STM32F103 SCL --> PB8 SD…

使用JS手动实现SementicUI的分页,解决页数过多的问题.

自己使用SemanticUI官网的分页组件, 但是有很多细节问题并没有解决方案,如果只是需要而分页,将页数渲染在分页组件上的话,那倒很简单,但是页面有很多的话,假如100页,那么整个tbody会随着tfoot…

C# PDF附件生成

最近项目上需要生成行业某证件,查阅了一下,大体有两个思路可以实现 1.图片格式 2.PDF格式 使用图片格式,GDI绘图的形式,GDI绘图相关库资料比较多,难度也还好,问题是生成的证不是很好看,看上去…

ESP32学习笔记 -- ESP32-S3使用自定义分区表

什么是分区表? 分区表(Partition Table),主要是用来对ESP32-S3外挂的SPI FLASH进行区域划分的一个表格,通过这个表格,可以根据多个不同的功能,将SPI FLASH划分为不同的区域,方便开发者存储数据。 分区表主要有两种格式,一种是方便开发人员进行更改的.csv格式,一种是…

【Spring框架全系列】初识Spring MVC(上)

🌃哈喽,大家好,我是小浪。接着上篇博客,我们学习了springboot配置日志文件,到此,那么springboot的内容也更新的差不多了,由于是初学阶段,所以不学习那么深入,那么我们学习…

数据结构:单链表增、删、查、改的实现

1.概念 链表是一种 物理存储结构上非连续 、非顺序的存储结构,数据元素的 逻辑顺序 是通过链表 中的 指针链接 次序实现的 。 2.形式 我们使用链表一般都是创建一个结构体。 typedef int SLTDataType; typedef struct SListNode {SLTDataType data;struct SListN…

USB2.0 HUB的MTT与STT

HUB:集线器 以前呀,我也不清楚MTT与STT的区别,记得有一次选型的时候,很懵逼,结果还是按照以前同事的方案去选了,到后面想起来才抽空整明白了。 所以今天就来说下USB HUB里面的MTT与STT,并在文…

【GO】31. websocket实现

一. 引入gin、gorilla websocket包 go get github.com/gin-gonic/gin go get github.com/gorilla/websocket 二. 服务端代码 package mainimport ("bytes""fmt""github.com/gin-gonic/gin""github.com/gorilla/websocket""log&…

从字节出来的测试总监,让我们用这份《测试用例规范》,再也没加班过。

经常看到无论是刚入职场的新人,还是工作了一段时间的老人,都会对编写测试用例感到困扰?例如: 固然,编写一份好的测试用例需要:充分的需求分析能力 理论及经验加持,作为测试职场摸爬打滚的老人&…

RobotStudio教程:ABB机器人TCP路径轨迹跟踪功能介绍与使用方法

目录 功能介绍 机器人工作站创建 TCP路径轨迹全局跟踪 基于事件管理器的TCP路径轨迹局部跟踪 基于Smart组件的TCP路径轨迹局部跟踪 仿真运行 功能介绍 干涉检查是虚拟仿真工作中非常重要的一个步骤,尤其是机器人工具与工件、工装夹具之间的碰撞干涉&#xff…

Java高阶数据结构 图的最短路径问题

图的最短路径问题! 文章目录 Java高阶数据结构 & 图的最短路径问题1. Dijkstra算法【单源最短路径】1.1 Dijkstra算法证明1.2 Dijkstra算法代码实现1.3 堆优化的Dijkstra算法1.4 堆优化Dijkstra算法代码实现 2. Bellman-Ford算法【单源最短路径】2.1 BF算法证明…

常见的基础模块电路,你都能看懂吗?

文章开始前,先来考考大家~ 下面的五副电路图,你能看懂几个? 目录 01.电源电路 02.运算放大器电路 03.信号产生电路 04.信号处理电路 05.传感器及其应用电路 06.显示电路 TDA2030电路图 34063电路图 555电路 TDA2030电路图 三极管分立元…

音视频八股文(11)-- ffmpeg 音频重采样

1重采样 1.1 什么是重采样 所谓的重采样,就是改变⾳频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。 1.2 为什么要重采样 为什么要重采样?当然是原有的⾳频参数不满⾜我们的需求,⽐如在FFmpeg解码⾳频…