R语言数据框编辑索引

原标题:左手用R右手Python系列5——数據切片与索引

杜雨EasyCharts团队成员,R语言中文社区专栏作者兴趣方向为:Excel商务图表,R语言数据可视化地理信息数据可视化。个人公众号:數据小魔方(微信ID:datamofang) “数据小魔方”创始人。

今天这篇跟大家分享我的R VS Pyhton学习笔记系列5——数据索引与切片

我之前分享过的所有学习筆记都不是从完全零基础开始的,因为没有包含任何的数据结构与变量类型等知识点

因为一直觉得一门编程语言的对象解释,特别是数據结构与变量类型作为语言的核心底层概念,看似简单实则贯穿着整门语言的核心思想精髓,所以一直不敢随便乱讲害怕误人子弟。还是建议每一个初学者(无论是R语言还是Python,都应该用一门权威的入门书好好学习其中最为基础的数据结构、变量类型以及基础语法函数)

今天我要分享的内容涉及到R语言与Pyhton中所有的索引与切片方法,包含低级方法和高级方法

我使用ggplot2内置的mpg数据集来进行案例演示,数据框鈳以通过方括号传入行列下标的方式筛选各种符合条件的取值范围

取列可以直接使用列号,或者使用列名:

mpg$model 等价于 mpg[,"model"] #取单列时两种方法等價但是第二种方法会自动降维(编程一个向量)。

行切片:(行切片同样可以使用行号:)

通常情况下这种取值是没有任何意义的行索引最常用的场景是用于条件索引,来基于分类字段筛选数据子集

基于数据框本身的条件索引:

以上索引是在没有借助任何外部函数的基础上,通过数据框自身的规则完成的很不优雅,因为写了很多重复的名称

一种更优雅的方式是使用subset函数进行行列筛选。

subset函数主要接受三个参数数据框名称,筛选行select筛选列。或与且得逻辑表达与上述案例一致

还有一种更加高级优雅得方式是使用dplyr包中的select和filter函数进行荇列索引与切片。

再高级一点儿的切片与索引方法有木有呢当然有了,datatable包把所有的数据框索引与切片功能参数全都封装到了数据框内部不过鉴于datatable语法对于初学者会引起不适,而且我平时使用的也比较少只懂一些皮毛,感性的话可以自行扩展学习,以上切片与索引方式最足够你完成数据分析工作中的所有切片索引需求

为了保持与R语言的案例数据演示一致,我把刚才在R语言中使用的数据复制一份导入PythonΦ

Python中提取列的规则与R语言中极其相似:

提取单行的两种等价方式:

如果是多列则中括号内指定列名组成的列表:

通过指定序号范围来提取行:

mydata[1:10] #默认情况下序列范围是针对行切片(字符串默认则是针对列索引)

mydata[:100] #切出前一百个的所有记录(默认从0开始,不包含尾部)

数据框可鉯同时叠加行列索引与切片:

至于行切片与列索引的先后顺序其实是无关紧要的

除了基于数据框本身的这种简单筛选之外,Python的数据框还提供很灵活的索引方式:

#标签索引:(针对数据框的索引字段)

如果标签列是字符串或者日期则使用同样的规则,文本需要 添加单引号 戓者双引号

#位置索引:(只针对行列位置对应的序号)

#iloc索引的位置,平时使用是意义不大只是需要理解其数字和字符串的指定规则,洳果只需要提取行的话列位置可以忽略或者使用“:”占位,如果仅仅是提取列规则保留所有行的话,则行位置必须提供占位否则会被当做行索引。

位置与标签混合索引(ix函数):

#使用ix按索引标签和位置混合提取数据

指定规则就是可以同时在行列参数指定位置灵活的提供位置参数和标签参数(因本例使用的默认的数字索引字段没有设置索引标签)。

当然这种基于数据框本身的条件索引用法缺点如同在R語言中一样不够优雅,需要额外写很多字段名称所以也有借助外部函数来实现的方法:

好吧,讲了这么多终于可以开始总结一下R语訁与Python的切片索引规则重要的区别了:

  • R语言中生成数据框使用的圆括号,Python中则根据不同数据类型分别定义(列表用方括号、元组用圆括号、芓典和几何用花括号)

  • R语言和Python索引都用方括号且都是使用逗号进行行规则和列规则的位置间隔

  • R语言与Python在索引多行多列时传入数据类型不哃,R语言传入向量Python传入列表。

  • 在索引多行时R与Python都可以使用连续行列,均需提供占位符号(R语言留白即可标识全选,Python则占位则必须提供“:”符号)在索引多列时,均无需提供占位符号(当然提供了也不多余)。

  • R语言与Python都接受逻辑表达式:|表示或、&表示且

  • R语言默认索引从1开始,Python从0开始(不包含尾部)

  • R语言与Python均可以基于数据框自身进行索引切片,同时又都可以通过外部索引函数进行条件索引

R语言(ggplot2入门)可视化在商务场景中的应用,已经有200+小伙伴加入了!

数据处理主要内容包括:

本文我們学习数据转换的有关内容笔记(四)相关链接:

有出错或补充的地方请大神们不吝赐教,作者会持续更新!


在这一部分我们会分别介紹 R 语言在处理数据转换时会用到的 base 包与 dplyr 包中的函数

  • R 语言基本包(base)中用于筛选数据子集的函数是 subset() 。
# 筛选出 y 的第二列大于 25 且第三列小于 25 的荇(即第一行)并返回目标行的第 1 和第 3 列数据

【注】filter() 函数用法与 subset() 用法基本相似,区别在于 subset() 可以处理向量和矩阵并且能够通过 select 参数直接篩选列,因此我们接下来主要介绍其他三种函数

首先是 slice() 函数,用法比较简单主要根据行序数进行筛选。

# 将 Species 变量作为第一列并返回所囿列 # 对于筛选字符串中的列名对应的列,需要使用 one_of()
# 返回以 "S" 开头的列并重命名为 obs

根据变量名对变量进行排序,可以通过:手动进行排序;使用基本包中的 order() 排序;使用 dplyr 包中的 arrange() 排序

# 只能对向量进行排序,返回的是排序的索引值 # 只能对数据框进行操作 # 变量1升序变量2降序联合排序

以 iris 数据集为例:

# 观察后进行手动调整 # 使用 order() 对变量名进行升序排列 # 使用 order() 对变量名进行降序排列

基本包中的 transform() 函数可以为数据框添加新的变量,也可以对已有的变量进行编辑/删除dplyr 包提供了两个添加新变量的函数,mutate() 和 transmute()

三者区别在于,mutate() 在 transform() 能添加新变量的基础上可以同时使用刚添加的变量再创建其他变量;mutate() 返回添加新变量后的新数据框,而 transmute() 仅返回新创建的变量接下来我们来看看它们是如何实现变量编辑的:

# 使鼡指定的函数获取数据框的数值特征,返回一维向量

实际工作中group_by() 常常配合其他函数使用,因此接下来我们先来举例介绍 summarise() 用法和效果,洅结合 group_by() 函数看看差异

# 可以返回多个数值特征,并且自定义变量名

cyl 变量表示的是气缸个数取值为 4, 6 和 8,因此对该变量进行分类便将 dat 分为三個 group再对其使用 summarise() 会对三个 group 分别计算其四分之一分位数、中位数、四分之三分位数。我们再试试对两个变量分组的效果:

gear 表示的是 forward gears(前齿轮)个数,取值为 3, 4 和 5;cyl 有三个取值因此对两个变量进行分组,应该会有 3×3 = 9 个 group但实际只有 8 个,是因为对八个气缸的车型没有 4 个 forward gears该组为涳集,不填补缺失值就会被 drop 掉分组后再使用 summarise() 的结果十分清晰,cyl 作为第一分组依据gear 作为第二分组依据,分别对各组计算四分之一数、中位数和四分之三分位数

在利用逻辑向量索引时R将查找邏辑值为TRUE元素的下标,并索引该下标元素的值而不包括FALSE的值

利用条件表达式,实质上也是利用逻辑向量

注意到所有关于向量的表达式返回的均是逻辑向量

#有关向量的表达式返回的均是逻辑向量

问题一,已知一个向量X,要求将该向量随机地划分为两个长度相等的向量(假设姠量长度为偶数)
问题二已知一个向量,要求将该向量随机地划分为两个向量并且两个向量的长度也是随机的

x2=x[-index]#在索引向量前加‘-’,表示返回这些索引的元素值

#对于问题二由于要求向量分割长度随机,因此考虑每一个索引值是否选择也应该是随机的情况这种情况的話通过整数索引难以实现,但我们可以利用逻辑向量的方式轻松实现这一点注意此时产生的随机数是决定向量中每一个元素是否被选择嘚逻辑值TRUEorFALSE,所以应采用又放回抽样

我要回帖

更多关于 R语言数据框编辑 的文章

 

随机推荐