我们继续来总结一下R语言数据处理的第二部分——维度处理。在R语言中,常见的多维数据的存储形式有矩阵、数据框、列表和数组等,其中向量是特殊的矩阵,矩阵是特殊的数据框,数据框又是特殊的数组。对于不同的数据形式,有对应的不同方法处理,下面会分别介绍apply类函数、dplyr拓展包、reshape2包和tidyr包中的相关函数及其运用情况。

一、apply类函数

1.apply

若想对一个数组的行或者列按指定函数去计算的话,可以使用apply(x,margin,Fun,....),其中,x为一个数据,margin可取1(按行计算)或者2(按列计算),Fun是一个函数名,表示对数据的行或列而使用的函数。下面用简单的例子说明:

2.tapply

但大多数的时候,我们不会遇到这么简单的计算要求,现实更多的是分类汇总的思想。映射到R语言就是因子的概念。比如R语言中自带的iris数据集,其中的一个变量Species就是因子,因子简单理解就是分类变量,也就是我们分类汇总时参考的维度。如果想计算三种不同类型花

瓣长度的平均值,此时就需要用到tapply(x,index,Fun,...,simplify =T)。x为数组,index就是我们需要分类汇总参考的元素,Fun仍然是函数,simplify为T时,输出结果为数组,若为F时结果以list形式输出。下面看一下计算过程:

3. lapply及其变形

(1)当我们所处理的数据不是数据的时候,而是列表形式(list),可以使用lapply(),其功能与apply()相近且结果会以列表形式返回。

(2)如果想结果以矩阵或向量形式输出,则可是使用lapply的特殊版sapply(),两者的区别在于sapply中的参数simplify,当simplify=F时,sapply等价于lapply,当为F时,结果以向量或矩阵形式输出。

(3)若想控制结果输出的行名,sapply()的升级版函数vapply(),其用法与前者基本一致,其中的参数FUN.VALUE就能控制结果的行名。

(4)如果输入的列表数据中还存在列表形式的数据,此时就需要用到lapply()的升级版rapply()。其用法与lapply()用法一致,但是能够历遍输入的列表数据集中的列表数据。apply类函数的联系

二、dplyr拓展包中的常用函数

1.筛选函数filter(数据集,条件)

2.排序函数arrange(数据集,变量,排序变量)

3.分组函数group_by(数据集,变量)和聚和函数summarise()

之前在介绍apply类函数时,tapply函数能按照因子分类之后计算,其实group_by函数就相 当于分类的部分,接下来计算的部分可以通过summarise函数实现。

summarise函数返回的一种tibble格式的数据,此处暂时不介绍这种数据格式了。

4.数据关联join类函数

数据关联其实简单来理解就是按照多个数据集都包含的一个变量作为连接的依据,将多个数据集聚合成一个数据集。这个用数据库中主键和外键等概念比较容易理解,数据关联也是数据库中经常使用的操作。R语言中的关联函数用数学上集合(交集、并集、补集、全集)的概念也比较容易理解。

inner_join(x = data1,y=data2,by = "var1") / full_join(...) #内/全联函数

left_join(x = data1,y = data2,by = "var1") / right_join(...) #左/右联函数

semi_join:返回能够与y表匹配的x表的所有记录

anti_join:返回无法与y表匹配的x表的所有记录

具体内容可以参考下面的连接:R语言中的full_join、inner_join、left_join和right_join连接​www.jianshu.com

5.合并函数

bind_rows(data1, data2) # 数据表需要有相同的列数

bind_cols(data1, data2) # 数据表需要有相同的行数

6.管道函数 %>% :即通过%>%将上一个函数的输出作为下一个函数的输入,免写数据名。

三、reshape包的melt函数

reshape包中有挺多有用的函数,但是melt函数在拆分数据,处理数据维度上是很适合的,它会根据不同的输入数据类型(数据框、数组、列表等等)进行实际的操作。下面就分情况介绍一下melt函数。

1.数据框

melt函数在处理数据框时,理解上会稍微有些复杂,下面是它的使用形式:

melt(data,id.vars,measure.vars,variable.name='variable',na.rm=F,value.name='value')

·id.vars:需要保留数据框的变量名(或者变量名的位置),每个变量都在输出结果占一列

·measure.vars:选择的变量名会构成新的一列变量(或者位置),且改变量原本的值也会构

成新的一列变量,两列数据分别记为variable 和 value两列。

2.数组

melt函数在处理数组类型时,用法就比较简单了,它会数组中的每个元素的维度信息,依次地进行识别,根据数组的维数会生产对应数量的变量用于记录维度信息,且会将原始元素的值作为最后的变量与之前的维度变量合并成新的数据集。具体可看下面的过程:

生成的数据集前三个变量就是数组元素的维度信息,最后的value列就是原始值。

3.列表

如果是处理列表数据,melt函数会将列表中的数据分成两列,一列记录列表元素的值,另一列记录列表元素的名称。如果列表中的元素是列表,则增加列变量存储元素名称。元素值排列在前,名称在后,越是顶级的列表元素名称越靠后。具体可见下面的过程:

四、tidyr拓展包的常用函数

tidyr包主要的功能是实现数据框的变形,实现行或列的分割和合并,处理数据框中的空值,根据一个表格衍生出其他表格。

1.gather函数

gather函数的功能是将宽数据准换为长数据:宽数据转长数据

函数形式:gather(data,key,value,...,na.rm=F)

key:将原数据框中的所有列赋给一个新变量key

value:将原数据框中的所有值赋给一个新变量value

…:指定变量聚到同一列中,可通过变量在数据集中的列数,也可以使用"-"排除特定的变量

na.rm:是否删除缺失值

上图的数据转换过程,可通过下面的代码实现:

2.spread函数

spread函数的功能是将长数据准换为宽数据:长数据转宽数据

函数形式:spread(data, key, value, fill = NA, convert = FALSE, drop = TRUE)

key:指定转换的某列,其观测值作为转换后的列名

value:其他列的观测值分散到相对应的各个单元

fill:对于缺失值,可将fill的值赋值给被转型后的缺失值

上图的数据转换过程,可通过下面的代码实现:

3.unit函数

unit函数能让数据框中多列合并为一列。其形式如下:

unit(data ,col ,... ,sep ,remove)

col:指定组合为新列的名字

...:指定数据中哪些列组合在一起

sep:组合后新列中数据之间的分隔符

remove:逻辑值,是否保留参与组合的列

4.separate函数

separate函数的功能与unit相反,即将数据框中的某列按照分隔符拆分为多列,形式如下:

separate(data ,col,into,sep,remove,...)

col:待拆分的某列

into:定义拆分后新的列名

sep:分隔符

remove:逻辑值,是否删除拆分后的列

大概地将R语言数据维度处理的常用方法都理了一遍,希望能对入门的小伙伴有帮助,最近有点忙,更新得比较慢,下次会更新R语言数据处理最后的一个部分—— 特殊文本处理,希望不拖更,大家也可以多交流一下,期待大家的意见。

r语言集合补集_R语言之数据处理(二)相关推荐

  1. r语言集合补集_R语言学习笔记(14)-常用包

    一.reshape2包对数据格式进行转换 > x + data = 1:5) > y + data = 1:5) > x k1 k2 data 1 NA 1 1 2 NA NA 2 ...

  2. r语言清除变量_R语言(1)初识与数据结构

    点击上方蓝字,记得关注我们! a picture is worth a thousand words! 一,R语言简介 1,R语言的发展 上世纪90年代初,新西兰奥克兰大学 Ross Ihaka 和 ...

  3. r语言logistic回归_R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用...

    原文链接 :http://tecdat.cn/?p=14017​tecdat.cn 通常,我们在回归模型中一直说的一句话是" 请查看一下数据 ". 在上一篇文章中,我们没有查看数据 ...

  4. r语言datarame删除行_R语言缺失值的处理:线性回归模型插补

    原文链接: 拓端数据科技 / Welcome to tecdat​tecdat.cn 在当我们缺少值时,系统会告诉我用-1代替,然后添加一个指示符,该变量等于-1.这样就可以不删除变量或观测值. 视频 ...

  5. r - 求平均成绩_R语言 从零开始的笔记(一)

    R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. R语言于生物学分析中的应用越来越广泛,在其他领域的统计绘图应用 ...

  6. R语言JAVA对比_R语言统计分析应用与SAS、SPSS的比较

    能够用来做统计分析的软件和程序很多,目前应用比较广泛的包括:SPSS, SAS.R语言,Matlab,S-PLUS,S-Miner等.下面我们来看一下各应用的特点: SPSS: 最简单的,都是菜单操作 ...

  7. r语言集合补集_【高中数学必修1研读】之一“第一章 集合与函数概念”

    第一章:集合与函数概念 [导入例子] "神舟"五号载人航天飞船离地面的距离随时间的变化而变化:上网费用随着上网时间的变化而变化:出国旅游人数日益增多:城市绿化面积不断扩大..... ...

  8. r语言worldclim数据_R语言空间数据分析(五):栅格数据处理

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识图谱等,著有& ...

  9. r语言 list添加_R语言里面双层list变成长形数据框

    绘图需求最大的难关往往是数据整理,比如下面的双层list : set.seed(123456)gs=list(tmp1=list(g1=sample(1000,abs(floor(100*rnorm( ...

最新文章

  1. 让Transformer的推理速度提高4.5倍,这个小trick还能给你省十几万
  2. Django Models 多条件查询 以及Q/F查询
  3. 用python爬取淘宝用户数据的单位是_国内有没有数据爬取方面的公司?
  4. 软件开发了10年,迷茫了
  5. Linux 重启网卡
  6. java 虚拟机内存管理_java虚拟机内存管理
  7. 动态规划——数塔(hdu2084)
  8. php curl keep alive,php curl 保持长连接
  9. 不需要的系统垃圾把它杀掉!
  10. 关于Spring,所有的都在这了,具有收藏价值
  11. 竟还有这样的代码注释我笑喷了
  12. android 糖果条纹进度条,小破站别出心裁,咒术回战进度条是高专纽扣,堀与宫村是糖果...
  13. 比较自然语言与计算机语言,计算机语言与自然语言的比较研究.pdf
  14. R语言中的igraph包绘制网络图
  15. java实现两个数运算_用java做简单的计算器类,实现两个数字的加减乘除运算
  16. 递归算法到非递归算法的转换
  17. 猜数字游戏(数字炸弹)
  18. java资源使用效率较高,Java 进程资源使用率较高问题定位
  19. linux18安装anyconnect4.9遇到I/O问题
  20. 计算机静音图标无法更改怎么办,电脑声音图标有红叉怎么办?教您解决方法

热门文章

  1. MySQL5.7重置root密码
  2. 读数据库所有表和表结构的sql语句了(mssql)
  3. sublime text 3中安装ctags支持函数跳转,安装convertToUtf8支持中文步骤[工具篇]
  4. 关于sources.list和apt-get [转载]
  5. CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义----问题解决办法...
  6. 定时器 setTimeout setInterval
  7. PaddlePaddle飞桨OCR文本检测——更改模型保存间隔(六)
  8. 华为机试HJ25:数据分类处理
  9. android上传文件用哪个布局,每周总结20130821——android控件的尺寸、http文件上传...
  10. arcgis的numpy模块_数据分析之numpy模块