当前位置: 首页 > news >正文

R语言学习--Day03--数据清洗技巧

在一般情况下,我们都是在数据分析的需求前提下去选择使用R语言。而实际上,数据分析里,百分之八十的工作,都是在数据清洗。并不只是我们平时会提到的异常值处理或者是整合格式,更多会涉及到将各种各样的数据整合,按照要求去除掉不合规的数据,再并到一起形成一个纯净的,可利用的数据,甚至有些时候还需要进行脱敏操作,防止对后续模型训练之类的影响,下面我来介绍一下经常会用到的操作。

筛选

按行操作

1、一般来讲,我们用的最多的就是filter(),无他,简单易懂,只需要在括号内加上我们的条件就行了,不过要注意用于筛选的条件一般都是要满足其格式的,建议在写之前先明确好要用到的东西,而不是一股脑地写逻辑。当然了,这里我也踩过一个小坑,就是filter()在运行时是不能识别NA的,在筛选时会自动去掉NA那一行,会因此忽略掉很多信息,所以我们一般先对数据集做NA判断,用is.na(),将NA值返回为1或者0,从而避免过滤了重要的信息。

2、而另一个用的比较多的就是slice()了,一般我们在筛选排名或者时间时用到,比如

lab_base <- lab_base %>%group_by(ID)%>% # 按照ID分组arrange(TIME)%>% # 按照TIME排序 slice(TIME,n=1)%>% # 选取时间最早的数据ungroup()%>%dplyr::select(ID,TIME,VALUE)

代码的意思是在每一组ID的分组内,先按照时间排序,再筛选时间最早的那个数据保留,这种用法相比平时用mid_time,可以节省很多算力空间,尤其是在涉及到数据量很大的rds文件时,大大提高我们的效率。

按列操作

而select()和mutate(),相信如果接触过一点R语言的都知道,我们经常会看到这两个语法,前者是把保存想要的列数据,后者则是对数据进行操作,添加或减少变量,有时也会用来添加中间变量来协助筛选,在结束时再去掉。值得注意的是,有很多包里都有select()的用法,我们一般默认的select()是dplyr里的,如果你不确定是否会调用到其他包的画,像上文用到的dplyr::select会直接调用我们想要的select。

节省算力小技巧

因子化

很多时候,我们存储的数据并不只是值,也有可能是文字,其中,有很多时候属于类别,比如男女,职业等,这个时候其实我们主要的需求是区分,而不是用这个值,自然也希望代码可以像我们一样,用起来简单。这个时候就可以对该列数据因子化,把他转换为分类变量,相当于把中文转换成了数字,这样会更好区分,所用到的内存也会更少。

按类别赋予值

与因子化的核心思想一样,都是通过节省代码判断中文的时间,只不过不同的是,我们可以新建一列,在筛选的同时先赋予一个等同于其类别的数字,方便在后面调用分类的时候用创建的新列,从而节省算力,比如:

lab_base $test_new <- 0
lab_base[grep("医生|科学家|植物学家",lab_base$NEW_JOB),]$test_new <- 1

这样,假如我们要筛选高科技人才时,就可以直接筛选test_new值为1的列。

函数

就像我们在其他语言中学过的类似一样,用function来执行很多需要重复的操作,可以节省算力,并大大提高我们的代码效率以及对代码的理解,但与其他语言不同的是,列表下函数的作用对象是会改变的,也就是说在写逻辑之前,不仅要想逻辑本身是否通顺,更要想清楚操作的对象是否适用于该方法,比如列表下的子列表,很多时候我们会将其转换为dataframe来操作,从而更好地处理数据,但在涉及到用function来操作列表里的内容是,用lapply来操作子列表,也会很方便,也能使其在操作完保持子列表的特性嵌套在列表中。

相关文章:

  • 【学习笔记】计算机操作系统(四)—— 存储器管理
  • 懒汉式单例模式的线程安全实现
  • 医疗机械中丝杆支撑座有什么特殊要求?
  • 案例分析组合投资策略的回测与绩效分析
  • LLM学习笔记(六)线性代数
  • buuctf Crypto-鸡藕椒盐味1
  • Rust 数据结构:String
  • 后端框架(3):Spring(1)
  • IntelliJ IDEA打开项目后,目录和文件都不显示,只显示pom.xml,怎样可以再显示出来?
  • 西门子 S1500 PLC 通过 Profinet 对 6 台施耐德 ATV304 变频器的控制,用于 6 台升降台的位置控制。
  • Lua中使用module时踩过的坑
  • K8S从Harbor拉取镜像
  • Go语言处理HTTP下载中EOFFailed
  • Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
  • 力扣654题:最大二叉树(递归)
  • React底层架构深度解析:从虚拟DOM到Fiber的演进之路
  • spring cloud gateway 源码解析
  • 火山引擎AI大模型
  • 经典启发算法【早期/启发式/HC爬山/SA模拟退火/TS禁忌搜/IA免疫 思想流程举例全】
  • Socket echo server
  • 美国新泽西客运公司遭遇罢工:40年来首次,35万人受影响
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 师爷、文士、畸人:会稽范啸风及其著述
  • 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管
  • 圆桌丨新能源车超充技术元年,专家呼吁重视电网承载能力可能面临的结构性挑战
  • 上交所五方面落实募资新规:强化关键少数责任和股东权利保障