R语言——reshape2包、tidyr包、dplyr包(五)

目录

一、数据转换之reshape2包:melt与dcast函数

二、数据转换之tidyr包:gather与spread函数,separate与unite函数

三、据转换之dplyr包

四、参考


一、数据转换之reshape2包:melt与dcast函数

merge 函数 

使用merge函数
x <- data.frame(k1=c(NA,NA,3,4,5),k2=c(1,NA,NA,4,5),data=1:5)
y <- data.frame(k1=c(NA,2,NA,4,5),k2=c(NA,NA,3,4,5),data=1:5)

【使用 cbind 或 rbind 无法区分哪部分来自 x , 哪部分来自 y 。】
merge(x,y,by)合并函数:by表示根据x和y中的某一列进行合并。如:
merge(x,y,by=c(“k1”,“k2”))

reshape2 包 

安装reshape2包:install.packages('reashape2')

加载reshape2包:library(reshape2)
(使用R中的airquality数据集做演示)
names(airquality) <- tolower(names(airquality))     


aql <- melt(airquality,id.vars = c(“month”,“day”))      #将数据中的month和day作为id信息,宽数据变长数据。


aqw <- dcast(aql,month~variable,fun.aggregate=sum,na.rm=TRUE)      #长数据变宽数据。

这里的~表示相关联,说明二者有关系,但不一定是相等;fun.aggregate表示给定一个函数指定如何重塑数据;na.rm表示移除na数据。

二、数据转换之tidyr包:gather与spread函数,separate与unite函数

安装tidyr包

tdata <- mtcars[1:10,1:3]
tdata <- data.frame(names=rownames(tdata),tdata)
gather(tdata,key=“Key”,value=“Value”,cyl,disp,mpg)      #宽数据变长数据,类似于melt,tdata是数据框,key为标签,value为对应值。


gather(tdata,key=“Key”,value=“Value”,cyl,-disp)      #disp单独放到一列中


gdata <- gather(tdata,key=“Key”,value=“Value”,2:4)      #这里的2:4等于cyl,disp,mpg(或者cyl:mpg)

spread(gdata,key=“Key”,value=“Value”)      #spread函数与gather函数作用相反,它是将长数据变为宽数据

df <- data.frame(x=c(NA,'a.b','a.d','b.c'))
separate(df,col=x,into=c('A','B'))       #将df数据框中的x列,分割为A、B两列,默认识别分隔符为“.”


df <- data.frame(x=c(NA,'a.b-c','a-d','b-c'))
sepa <- separate(df,col=x,into=c('A','B'),sep="-")       #将df数据框中的x列,分割为A、B两列,分隔符为“-”

unite(sepa,col='AB',A,B,sep="-")      #unite函数与separate函数作用相反,将sepa中的A和B列,用连接符“-”连接,组成列AB

三、据转换之dplyr包

dplyr包不仅可以对单个表格进行操作,也可以对双表格进行操作。 功能强大,函数很多。

对单表格的操作

1)dplyr::filter(iris,Sepal.Length>7)      #过滤函数。函数前面加上“包名::”是为了防止dplyr包中的函数名与其他函数产生冲突

dplyr::distinct(rbind(iris[1:10, ] , iris[1:15, ]))      #去除重复

dplyr::slice(iris,10:15)      #slice是切片的意思,可以用于取出数据任意行

dplyr::sample_n(iris,10)      #随机取样10行

dplyr::sample_frac(iris,0.1)      #按比例随机取样

dplyr::arrange(iris,Sepal.Length)      #按照iris中的花萼长度Sepal.Length进行排序
dplyr::arrange(iris,desc(Sepal.Length))      #降序

select函数:dplyr包中的数据框取子集功能,比R自带的subset函数更加强大。

dplyr::mutate(iris,new=Sepal.Length+Petal.Length)      #添加新的变量new,其值是Sepal.Length+Petal.Length

2)dplyr包的统计函数
summarise函数:
summarise(iris,avg=mean(Sepal.Length))
summarise(iris,sum=sum(Sepal.Length))

dplyr::group_by(iris,Species)      #根据Species对iris进行分组  

3)链式操作符%>%
两个百分号中间夹着一个大于号,称为链式操作符,它的功能是用于实现将一个函数的输出传递给下一个函数,作为下一个函数的输入。在RStudio中可以使用ctrl+shift+M快捷键输出来。
如:head(mtcars,20) %>% tail(10)      #输出mtcars中的第10到20行

iris %>% group_by(Species) %>% summarise(avg=mean(Sepal.Width)) %>% arrange(avg)       #对iris数据集先进行分组,再求平均,最后排序

 对双表格的操作

a <- data.frame(x1=c('A','B','C'),x2=c(1,2,3))
b <- data.frame(x1=c('A','B','D'),x3=c(T,F,T))


1)左连接
dplyr::left_join(a,b,by=“x1”)

2)右连接
dplyr::right_join(a,b,by=“x1”)

3)内连接:取x1的交集
dplyr::inner_join(a,b,by=“x1”)


4)全连接:取x1的并集

5)半连接:a与b的交集,把b中有的a中没有的去掉
dplyr::semi_join(a,b,by=“x1”)

6)反连接:a与b的补集,保留a中有而b中没有的观测
dplyr::anti_join(a,b,by=“x1”)

数据集的合并:
mtcars <- mutate(mtcars,Model=rownames(mtcars))
first <- slice(mtcars,1:20)
second <- slice(mtcars,10:30)
1)取数据集交集:intersect(first,second)
2)取数据集并集:dplyr::union_all(first,second)
3)取非冗余的数据集并集:
dplyr::union(first,second)
4)取first的补集:setdiff(first,second)

四、参考

R语言入门与数据分析

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

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

相关文章

听GPT 讲Rust源代码--library/proc_macro

File: rust/library/proc_macro/src/bridge/rpc.rs 在Rust源代码中&#xff0c;rust/library/proc_macro/src/bridge/rpc.rs文件的作用是实现了Rust编程语言的编译过程中的远程过程调用&#xff08;RPC&#xff09;机制。 这个文件定义了与编译器的交互过程中使用的各种数据结构…

阿里云2核2G3M服务器能放几个网站?有限制吗?

阿里云2核2g3m服务器可以放几个网站&#xff1f;12个网站&#xff0c;阿里云服务器网的2核2G服务器上安装了12个网站&#xff0c;甚至还可以更多&#xff0c;具体放几个网站取决于网站的访客数量&#xff0c;像阿里云服务器网aliyunfuwuqi.com小编的网站日访问量都很少&#xf…

万界星空科技低代码平台基本模块与优势

低代码平台&#xff08;Low-Code Development Platform&#xff0c;LCDP&#xff09;就是使用低代码的方式进行开发&#xff0c;能快速设置和部署的平台。低代码平台旨在简化应用开发过程&#xff0c;降低开发难度&#xff0c;缩短开发周期&#xff0c;并使非专业程序员&#x…

线性代数笔记3 1.1

学习视频&#xff1a; 2.2 矩阵运算&#xff08;二&#xff09;_哔哩哔哩_bilibili 包括内容&#xff1a; p10矩阵运算&#xff08;二&#xff09; p11特殊矩阵 p12逆矩阵&#xff08;一&#xff09; p13逆矩阵&#xff08;二&#xff09;

基于Python +Selenium的爬虫详解

今天我们来详细学习一些 selenium 的强大用法 一、selenium简介 由于requests模块是一个不完全模拟浏览器行为的模块&#xff0c;只能爬取到网页的HTML文档信息&#xff0c;无法解析和执行CSS、JavaScript代码&#xff0c;因此需要我们做人为判断&#xff1b; 1、什么是sele…

PowerShell——多任务后台作业

PowerShell——多任务后台作业 实验环境&#xff1a;操作系统为Windows8(或之后)或者Windows Server2012&#xff08;或之后&#xff09;运行PowerShell v3或更新版本的计算机 任务: 创建一个后台作业获取计算机上系统事件日志中最近的26条错误记录&#xff0c;之后将记录导出…

算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解

引言&#xff0c;少年们&#xff0c;大家好。在这里祝大家元旦快乐&#xff0c;我是博主那一脸阳光&#xff0c;今天来介绍二分查找 在计算机科学领域&#xff0c;搜索算法是数据处理和问题解决的重要工具之一。其中&#xff0c;**二分查找算法&#xff08;Binary Search&#…

Git开发工具基本使用

文章目录 前言Git仓库基本概念基本环境安装清除原先配置生成秘钥配置Host添加公钥Github添加Gitee添加测试 本地仓库基本概览查看提交日志(log)版本回退添加文件至忽略列表分支分支冲突 远程仓库推送到远程仓库从远程仓库中抓取和拉取 在Idea中使用Git总结 前言 这里只是对Git…

Perforce:2024年改变数字化格局的五大技术趋势

自去年ChatGPT发布以来&#xff0c;生成式人工智能占据了头条、会议&#xff0c;甚至占据了我自己工作场合的对话。人工智能技术如此迅速地改变工作流程和公司的关注点&#xff0c;真是令人难以置信。 我叫瑞安&#xff0c;在技术领域工作了近二十年&#xff0c;拥有15年的全栈…

图像分割实战-系列教程3:unet医学细胞分割实战1(医学数据集、图像分割、语义分割、unet网络、代码逐行解读)

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…

计算图与动态图机制

一、计算图 计算图是用来描述运算的有向无环图 计算图有两个主要元素&#xff1a;结点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09; 结点表示数据&#xff0c;如向量&#xff0c;矩阵&#xff0c;张量边表示运算&#xff0c;如加减乘除卷积等 用计算图表…

redis安装与配置(Ubuntu)

目录 1. 切换到 root 用户 2. 搜索安装包 3. 安装 redis 4. 查看 redis 是否正常存在 5. 修改ip 6. 重新启动服务器 7. 连接服务器 1. 切换到 root 用户 通过 su 命令切换到 root 用户。 2. 搜索安装包 apt search redis 这里安装的是下面的版本&#xff1a; 3. 安装 …

LaTeX写论文,公式后段落取消缩进方法:\noindent

在论文的段落中&#xff0c;需要插入一个公式&#xff0c;按道理公式后应该紧接着是段落的文本内容&#xff0c;但如果直接写的话&#xff0c;编译得到的PDF中呈现出来的却是开头缩进的样子 如果需要取消公式后面的段落缩进&#xff0c;可以使用命令 \noindent 该命令的作用…

从零开始 - 在Python中构建和训练生成对抗网络(GAN)模型

生成对抗网络&#xff08;GANs&#xff09;是一种强大的生成模型&#xff0c;可以合成新的逼真图像。通过完整的实现过程&#xff0c;读者将对GANs在幕后的工作原理有深刻的理解。本教程首先导入必要的库并加载将用于训练GAN的Fashion-MNIST数据集。然后&#xff0c;提供了构建…

反转链表、链表的中间结点、合并两个有序链表【LeetCode刷题日志】

一、反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路一&#xff1a;翻转单链表指针方向 这里解释一下三个指针的作用&#xff1a; n1&#xff1…

Jupyter Notebook的10个常用扩展介绍

Jupyter Notebook&#xff08;前身为IPython Notebook&#xff09;是一种开源的交互式计算和数据可视化的工具&#xff0c;广泛用于数据科学、机器学习、科学研究和教育等领域。它提供了一个基于Web的界面&#xff0c;允许用户创建和共享文档&#xff0c;这些文档包含实时代码、…

(15)Linux 进程创建与终止函数forkslab 分派器

前言&#xff1a;本章我们主要讲解进程的创建与终止&#xff0c;最后简单介绍一下 slab 分派器。 一、进程创建&#xff08;Process creation&#xff09; 1、分叉函数 fork 在 中&#xff0c; fork 函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新的进程。 …

1885页学习资料。一本在手,python不愁!

python3.11即将于下半年发布&#xff0c;新的版本速度提升2倍&#xff0c;以弥补与其他编程语言在速度上的缺陷。可以预见Python语言在未来的应用范围会越来越广。 python学习方向建议&#xff1a; 如果你是本科及以下学历&#xff0c;建议你学习以下两个方向 1、爬虫。简单…

Matplotlib基础

目录&#xff1a; 一、绘制yx^2图像&#xff1a; 一、绘制yx^2图像&#xff1a; from matplotlib import pyplot as plt import numpy as np #生成&#xff08;-50,50&#xff09;的数组 x np.arange(-50,50) #计算因变量y的值 y x ** 2 #根据x、y数组绘制图形yx^2 plt.plot…