4.R语言【rehsape2包】介绍、melt( )、cast( )函数、其他使用技巧

news2024/12/29 8:49:51

b站课程视频链接:
https://www.bilibili.com/video/BV19x411X7C6?p=1
腾讯课堂(最新,但是要花钱,我花99😢😢元买了,感觉讲的没问题,就是知识点结构有点乱,有点废话):
https://ke.qq.com/course/3707827#term_id=103855009
 
本笔记前面的笔记参照b站视频,【后面的画图】参考了付费视频
笔记顺序做了些调整【个人感觉逻辑顺畅】,并删掉一些不重要的内容,以及补充了个人理解
系列笔记目录【持续更新】:https://blog.csdn.net/weixin_42214698/category_11393896.html

文章目录

  • 1. rehsape2包介绍
  • 2. 使用前必须准备的工作
    • 2.1 melt函数:宽数据——>长数据
    • 2.1 cast函数:长数据——>宽数据
      • ① dcast( )函数
      • ② acast()函数
    • 3. 其他函数
      • 3.1 `add_margins()`函数
      • 3.2 `recast ()`函数
      • 3.3 `melt_check()`函数
      • 3.4 `colsplit()`函数

1. rehsape2包介绍

reshape2包是由Hadley Wickham开发的一个R包,从其命名不难看出,reshape2包可以对数据重塑,就像炼铁一样,先融化数据,再重新整合数据,它的主要功能函数为cast()melt(),实现了长数据格式与宽数据格式之间的相互转换
比如说,如果你要做回归等等的多变量分析,用到glm等等,那必然要用宽格式数据;
再比如说,如果你要到ggplot里面画图,按照Hadley大神的可视化语法思想,多半是要用长格式的数据的。

宽数据格式:每个变量单独成一列。
长数据格式:变量ID没有单独成列,而是整合在同一列

代码:
airquality
请添加图片描述

names(airquality) <- tolower(names(airquality))
aql <- melt(airquality, id.vars = c(“month”, “day”))
View(aql)
在这里插入图片描述



2. 使用前必须准备的工作

# 安装
install.packages("reshape2")
# 导入
library(reshape2)

#reshape2包的学习主要以官方推荐的空气质量数据集(airquality)为例
使用前必须要将列名变成小写,否则后面会报错
names(airquality) <- tolower(names(airquality))

2.1 melt函数:宽数据——>长数据

官方介绍

从官方文档可以看出,melt()函数可以将一个对象“融化”为一个数据框。
对于不同的数据结构,melt()函数有不同的用法,如:
(1) 数据框(data frame):melt.data.frame()
(2) 数组(array):melt.array()melt.matrix()melt.table()
(3) 列表(list):melt.list()
(4) 向量(vector):melt.default()

用法
由于实际处理数据时,数据框(data frame)使用较为普遍,所以在此以数据框为例。

melt(
  data,              数据集
  id.vars,           ID变量的向量,可以是整数(变量位置)或字符串(变量名)。如果为空,将使用所有的变量
  measure.vars,      测量变量的向量。可以是整数(变量位置)或字符串(变量名称)。如果为空,将使用所有测量变量
  
  variable.name = "variable",  用于存储测量变量名的变量名
  na.rm = FALSE,      逻辑值,是否移除数据集中的NA
  value.name = "value",    用于存储值的变量的名称
  
  factorsAsStrings = TRUE    逻辑值,控制因子型变量是否转换为字符型
)

melt( )例子:

aml1 <- melt(airquality, id.vars=c("month", "day"))

代码:
airquality
请添加图片描述

names(airquality) <- tolower(names(airquality))
aml1 <- melt(airquality, id.vars=c(“month”, “day”))
View(aml1)
在这里插入图片描述

aml2 <- melt(airquality, id.vars =c("month", "day"),value.name = "my value")
head(aml2)

黄色背景展示了相较于上一步的不同
在这里插入图片描述

aml3 <- melt(airquality, id.vars =c("month", "day"),value.name = "my value",na.rm = T)
head(aml3)

可以发现,NA值所在的行被删除了!
在这里插入图片描述

aml4 <- melt(airquality, id.vars =c("month", "day"),value.name = "my value",
             na.rm = T,variable.name = "my variable")
head(aml4)

黄色背景展示了相较于上一步的不同
在这里插入图片描述

aml5 <- melt(airquality, id.vars =c("month", "day"),value.name = "my value",
                     na.rm = T,variable.name = "my variable",measure.vars = "temp")
head(aml5)

黄色背景展示了相较于上一步的不同;measure.vars参数能够选择某一列,或者除id.vars之外所有列作为variable。
在这里插入图片描述


接下来 ,我们再对列表数据的处理简单讲解。
melt.list()函数能够递归的拆分列表元素。

参数详解
在这里插入图片描述

level : 用于设置标签,默认值为1。

例子:

list1 <- as.list(c(1:10, c(NA,2,3,4)))
list1

在这里插入图片描述

melt(list1)

在这里插入图片描述

names(list1) <- letters[1:14]
melt(list1)

在这里插入图片描述

如果列表包含矩阵

a <- list(matrix(1:4, ncol=2), matrix(1:6, ncol=2))
a
melt(a)

在这里插入图片描述
在这里插入图片描述

其他的melt函数使用方法此处不再赘述。


2.1 cast函数:长数据——>宽数据

cast()函数具有两种形式:
1️⃣ dcast() :输出为数据框
2️⃣ acast() :输出为向量、矩阵、数组

① dcast( )函数

dcast(
	data,          数据集
	formula,      公式格式如下:x_variable + x_2 ~ y_variable + y_2 ~z_variable ~ … ;
	              "…“表示公式中未使用的所有其他变量;”."代表没有变量
	              
	fun.aggregate = NULL,       聚合函数,如果变量不能识别每个输出单元的单个观察值时需要设置此参数。如mean,sum等。
	
	margins = NULL,       变量名的向量(可以包括“grand_col”和“grand_row”)用来计算其边距,值为TRUE时计算所有边距。
	                      不能被追加的变量都将被悄悄地删除
	                      
	subset = NULL,        用于取子集
	fill = NULL,          用于填补缺失值的值
	drop = TRUE,          错失的组合保留还是删除
	
	value.var = guess_value(data)
)

例子:

# 首先将airquality数据框转化为长数据
 data <- melt(airquality, id=c("month", "day"), na.rm=T)
dcs1 <- dcast(data, month+day ~ variable)
head(dcs1)

可以看出,dcs1与airquality完全一致。

在这里插入图片描述
在这里插入图片描述

dcs2 <- dcast(data, month ~ variable, mean)  # average effect of month
dcs2

把day这一列合在一起(mean代表合在一起是求平均值)
在这里插入图片描述

dcs3 <- dcast(data, month ~ variable, mean, margins = c("month", "variable"))
dcs3

黄色标记处展示了与之前结果的差异。
在这里插入图片描述


② acast()函数

用法与dcsat()函数类似acsat()函数用法以ChickWeight数据集为例介绍。

准备工作:

# 载入数据集
data(ChickWeight)
head(ChickWeight)
# weight time chick diet
1     42    0     1    1
2     51    2     1    1
3     59    4     1    1
4     64    6     1    1
5     76    8     1    1
6     93   10     1    1

# 首先将数据集列名转换为小写
names(ChickWeight) <- tolower(names(ChickWeight))

# 构建数据集
chick <- melt(ChickWeight, id=2:4, na.rm=T)     # 多了一列  看宽数据与长数据的介绍
head(chick)  # 前6行

time的值:0 2 4 6 8 10 12 14 16 18 20 21
chick的值:1 2 3 4 5 …50
diet 的值:1 2 3 4
在这里插入图片描述

用法:

ac1 <- acast(chick, diet ~ time, mean) # average effect of diet & time
ac1

ac1矩阵的行为diet,列为time
在这里插入图片描述

ac2 <- acast(chick, time ~ diet, length)
head(ac2)

ac2表示的时在不同的饲养天数下,小鸡食物不同时的数据大小
在这里插入图片描述

library(plyr) # 为了使用".",引用变量
ac3 <- acast(chick, chick ~ time, mean, subset = .(time < 10 & chick < 20))
ac3

使用subset参数对数据集进行筛选
在这里插入图片描述

as4 <- acast(chick, chick ~ time ~ diet) # 生成三维数组
as4

在这里插入图片描述
当然 ,acast()函数换有很多其他的用法,有待在实际运用中去探索。



3. 其他函数

3.1 add_margins()函数

该函数的实际价值目前未知,仅以简单的例子列出,若有小伙伴了解,请在下方留言!

data <- data.frame(a = c(1:5),b = c(6:10),c = c('a','b','c','d','e'))
rownames(data) <- c('ass','xxx','ccc','fff','rr')
data1 <- add_margins(data,vars = "c")
View(data)
View(data1)

在这里插入图片描述
在这里插入图片描述

3.2 recast ()函数

一步操作进行melt和dcast,相当于整合了数据“融化”和“整合”两步。

# french_fries为reshape2包自带的数据集
head(french_fries)
 time treatment subject rep potato buttery grassy rancid painty
61    1         1       3   1    2.9     0.0    0.0    0.0    5.5
25    1         1       3   2   14.0     0.0    0.0    1.1    0.0
62    1         1      10   1   11.0     6.4    0.0    0.0    0.0
26    1         1      10   2    9.9     5.9    2.9    2.2    0.0
63    1         1      15   1    1.2     0.1    0.0    1.1    5.1
27    1         1      15   2    8.8     3.0    3.6    1.5    2.3
recast(french_fries, time ~ variable, id.var = 1:4)

在这里插入图片描述

3.3 melt_check()函数

这个函数的主要目的是在数据“融化”之前,检查数据集是否适合于“融化”,返回标识变量和测量变量。
有兴趣可以查看官方文档学习

3.4 colsplit()函数

相较于 strsplit()函数,个人感觉此函数功能更加强大,下面请看具体的例子。

x <- c('x_1','a_1','z_1')

strsplit(x,split = '_',fixed = T)
[[1]]
[1] "x" "1"

[[2]]
[1] "a" "1"

[[3]]
[1] "z" "1"


colsplit(string = x,pattern = "_", names = c('str','num'))
 str num
1   x   1
2   a   1
3   z   1

通过上面的例子,是不是更加倾向于colsplit()函数呢?当然, strsplit()函数自然有它的方便之处。

此外,reshape2包还有一个函数,是parse_formula()函数,它的主要功能是对cast的表达式格式进行转换;三个数据集,分别是french_fries、smiths和tips数据集,详细内容请阅读官方文档,或者通过?smiths进行查看。

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

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

相关文章

CAD转换PDF怎么转换?新手必备的方法

相信很多从事建筑类的相关工作的小伙伴们对CAD文件都并不陌生&#xff0c;在设计图纸和数据更改大都是使用这类文件的专业工具。这类文件的专业性较强设计出来的图纸也比较规范&#xff0c;但就有一个问题比较麻烦&#xff0c;那便是在不同设备打开需要对应的查阅软件&#xff…

【TypeScript】Ts基本概念

TypeScript基本概念 TypeScript 是什么&#xff1f; 目标&#xff1a;能够说出什么是typescript 内容&#xff1a; TS 官方文档TS 中文参考 - 不再维护 TypeScript 简称&#xff1a;TS&#xff0c;是 JavaScript 的超集&#xff0c;简单来说就是&#xff1a;JS 有的 TS 都有…

振弦采集模块参数配置工具的连接与断开

振弦采集模块参数配置工具的连接与断开 在指令区的【 COM 端口】组合框内操作完成。【端口】 下拉框&#xff1a;列出了本计算机当前已经存在的所有 COM 端口名称&#xff0c;若与模块连接的端口名称未在下拉框中列出&#xff0c;还可通过手工输入端口名的方法自由输入。 【速…

【NI Multisim 14.0原理图文件管理——新建设计文件】

目录 序言 一、原理图文件管理 二、新建设计文件 &#x1f34d;1. 空白文件 &#x1f34d; 2.系统安装模板文件 &#x1f34d;3. 自定义模板文件 序言 NI Multisim最突出的特点之一就是用户界面友好。它可以使电路设计者方便、快捷地使用虚拟元器件和仪器、仪表进行电路设…

C#,图像二值化(21)——局部阈值的韦尔纳算法(Wellner Thresholding)及源代码

1 韦尔纳算法&#xff08;Wellner Throsholding&#xff09;摘要针对计算大量缺陷时速度较慢且图像阈值不平滑的Wellner算法&#xff0c;本文提出了两种改进方案&#xff0c;第一种是一维平滑算法&#xff08;ODSA&#xff09;&#xff0c;第二种是基于第一种算法的&#xff0c…

《MYSQL实战45讲》笔记(11-20)

11&#xff1a;怎么给字符串字段加索引&#xff1f; 业务场景&#xff1a;基于字符串字段做查询。例如邮箱登录等等。 前缀索引的优势&#xff1a;相对于整个字段索引&#xff0c;前缀索引的占用空间更小。 前缀索引带来的问题&#xff1a;区分度过低的时候会额外扫描次数。 …

CATIA和CAD超全对比,来看看哪个好用

从文明伊始&#xff0c;绘图和制图就对人类发展发挥着重要作用&#xff0c;它通过图形表示使概念更容易理解&#xff0c;这导致了“工程艺术”的发展。绘图是一种使用图片和符号来呈现概念、想法或观点的方式&#xff0c;而绘图是任何现实世界对象或事物的图形表示。为了简化数…

1、Visual Studio 2017安装

目录 一、简介 二、安装步骤 三、Visual Studio 2017的使用 一、简介 Visual Studio是微软推出的一款C编译器&#xff0c;将“高级语言”翻译为“机器语言&#xff08;低级语言&#xff09;”的程序&#xff0c;VS是一个非常完整的开发工具集&#xff0c;包括了所有软件生命…

Vue2.0开发之——组件数据共享-父向子传值(38)

一 概述 组件之间的关系父向子传值子向父传值 二 组件之间的关系 2.1 组件之间的关系 在项目开发中&#xff0c;组件之间的最常见的关系分为如下两种 父子关系兄弟关系 2.2 父子组件之间的数据共享 父子组件之间的数据共享又分为: 父 -> 子共享数据子 -> 父共享数据…

070-JAVA项目实训:仿QQ即时通讯软件讲座五(讲解用户注册功能)

【上一讲】069-JAVA项目实训:仿QQ即时通讯软件讲座四(讲解系统登录功能)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 本文主要内容是实现注册QQ用户功能,自动获取本机IP地址,与系统用户判断端口是否唯一,使用的主要技术如下: 1.使用数据库技术完成注册功能; 2.自动…

【Linux】线程概念

目录&#x1f308;前言&#x1f338;1、Linux线程概念&#x1f361;1.1、概念&#x1f362;1.2、线程的优点&#x1f367;1.3、线程的缺点&#x1f368;1.4、线程的异常和用途&#x1f33a;2、Linux下进程 vs 线程&#x1f308;前言 这篇文章给大家带来线程的学习&#xff01;…

渗透测试基础【01】——测试流程(IPC$)

渗透测试基础【01】——测试流程 注意&#xff0c;攻击对方需要对方授权&#xff0c;本文章目的只为教学&#xff0c;不要拿去干违法的事 1 渗透测试流程 授权&#xff08;获取目标用户授权&#xff0c;否则是违法行为&#xff09;信息收集 nslookup whois扫描漏洞 nmapip…

【前端代码高亮】页面代码高亮展示之Highlight高亮组件应用详解,附多个主题效果

【写在前面】作为前端开发的基本上都有接触这个高亮组件&#xff0c;这个也是目前被大家誉为最全面&#xff0c;体验最好的&#xff0c;所以针对数据展示型高亮显示我是力推这个的&#xff0c;但是我个人还是觉得还有不完美的地方&#xff0c;比如说一边输入一边高亮就不行了。…

《UEFI内核导读》如果没有内存,程序代码还能不能执行?

敬请关注&#xff1a;“固件C字营 首先思考一个问题&#xff0c;冯洛伊曼架构的计算机如果没有内存&#xff0c;代码能被否正常执行&#xff1f;过程&#xff08;函数&#xff09;能不能被相互调用&#xff1f;答案是肯定的&#xff0c;其中的一个实现方法如下。这里只介绍汇编…

如何在Instagram上开店?Instagram开店教程请收好

Instagram 是国外非常重要的图像分享平台&#xff0c;具有很强的视觉吸引力。更重要的是&#xff0c;它是最受网红欢迎的社交媒体网站之一&#xff0c;每天有超过5亿用户访问它。巨大的流量和高活跃度&#xff0c;为卖家提供了大量的营销机会。而且最重要的是&#xff0c;现在在…

唤醒手腕 Go 语言开发学习笔记(基本简介、环境安装、基础知识)

1. Go语言简介 Go&#xff08;又称 Golang&#xff09;是 Google 的 Robert Griesemer&#xff0c;Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近&#xff0c;但功能上有&#xff1a;内存安全&#xff0c;GC&#xff08;垃圾回收&#xf…

day12|层序遍历合集、226.翻转二叉树、101.对称二叉树

目录 层序遍历合集 102.二叉树的层序遍历 107.二叉树的层次遍历II 199.二叉树的右视图 637.二叉树的层平均值 429.N叉树的层序遍历 515.在每个树行中找最大值 116.填充每个节点的下一个右侧节点指针 117.填充每个节点的下一个右侧节点指针II 104.二叉树的最大深度 11…

Hi3861鸿蒙物联网项目实战:智慧农业

华清远见FS-Hi3861开发套件&#xff0c;支持HarmonyOS 3.0系统。开发板主控Hi3861芯片内置WiFi功能&#xff0c;开发板板载资源丰富&#xff0c;包括传感器、执行器、NFC、显示屏等&#xff0c;同时还配套丰富的拓展模块。开发板配套丰富的学习资料&#xff0c;包括全套开发教程…

联合体(共用体) :(笔记补充)

目录 一.联合体的基本概念 二.相关面试题 三.联合体大小计算 关于结构体的内存对齐&#xff1a;http://t.csdn.cn/fbQuo 一.联合体的基本概念 联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员&#xff0c;特征是这些成员公用同一块空间&#xff08;所以…

jar转成dex文件 dex文件转化为smali文件

jar转成dex文件 dx 可以利用android studio中的dx工具。 可以看到android的tool安装位置: 在此路径下的如下目录有dx.bat,这个正是我们需要使用的工具。 D:\sdk\build-tools\30.0.3将dx.bat添加到环境变量 基本指令 > dx --dex --output 输出路径 待转化的jar包C