【R语言】数据操作

一、查看和编辑数据

1、查看数据

直接打印到控制台

x <- data.frame(a=1:20, b=21:30)
x

View()函数

此函数可以将数据以电子表格的形式进行展示。

用reshape2包中的tips进行举例:

library("reshape2")
View(tips)

head()函数

 查看前几行数据,参数n表示需要查看的行数,默认为6

tail()函数

查看后几行数据,参数n表示需要查看的行数,默认为6

2、编辑数据

fix()函数

 数据较少时,可以用此函数来编辑数据。使用时,会出现如下所示的一个弹窗,可以直接在这上面编辑数据。

当数据量特别大时,不适宜用此方法。

fix(tips)

 edit()函数

使用此函数,会生成一个新的数据,如果没有将新数据赋值给变量,它将直接打印到控制台。使用时,也会出现如下所示的一个弹窗,可以直接在这上面编辑数据。

当数据量特别大时,不适宜用此方法。

edit(tips)

二、筛选数据

subset()函数

此函数可对向量、矩阵和数据框提取子集,它允许直接使用列名或变量名,使得相较于中括号来说可读性更强。

以下通过reshape2包中的tips数据集进行举例:

# 筛选tips数据集中,星期天消费大于40美元,小费大于5美元,且不吸烟的男性买单
# 方法一:用中括号
tips[tips$total_bill > 20 &tips$tip > 5 &tips$sex == "Male" &tips$smoker == "No" &tips$day == "Sun",c("total_bill", "tip", "sex", "smoker", "day")]
# 方法二:使用subset()函数进行筛选
subset(tips,subset = total_bill > 20 & tip > 5 &sex == "Male" &smoker == "No" &day == "Sun",select = c("total_bill", "tip", "sex", "smoker", "day"))

 将上述方法一进行改进:使用with()函数,它的作用是对当前数据构建一个环境,并在该环境中计算表达式。

with(tips,tips[total_bill > 20 &tip > 5 &sex == "Male" &smoker == "No" &day == "Sun",c("total_bill", "tip", "sex", "smoker", "day")])

 sample()函数:随机抽样

此函数的3个重要参数:

  1. size:抽样数量
  2. replace:是否有放回地抽样
  3. prob:按照一定的概率进行抽样
x <- letters
sample(x, size=12)y <- array(LETTERS[1:24], dim=c(3,4,2))
sample(y,size=12)

如果对数据框列表使用sample()函数,那么得到的结果是对列或元素的随机抽样。对数据框来说,希望得到对行的随机抽样,所以需要先对行号随机抽样,然后选取相应的行。

 对列表进行随机抽样:

x <- list(a = c(1,3,4), b = letters, c=3:15, d=month.abb)
x
sample(x, size=3)

 对数据框进行随机抽样:

tips[sample(1:nrow(tips), 3),]

 三、合并数据

paste()和paste0()函数

将向量以字符串的形式拼接起来。

c()函数

将几个向量合并为更大的向量或列表

data.frame()函数

合并数据框。

cbind()函数

按列合并

x <- tips[,c(1,2)]
head(x)
y <- tips[,c(5,6)]
head(y)
z <- cbind(x,y)
head(z)

rbind()函数

 按行合并,且在合并时数据的列名称必须一样,但对列的顺序没要求。

x <- tips[sample(1:nrow(tips), 100),]
head(x)
y <- tips[sample(1:nrow(tips), 50),][,7:1] # y的列名称顺序与x相反
head(y)
z <- rbind(x,y)
head(z)

merge()函数

# 构建作者信息表
authors <- data.frame(name = I(c("Tukey", "Venables", "Tierney", "Ripley", "McNeil")),nationality = c("US", "Australia", "US", "UK", "Australia"),deceased = c("yes", rep("no", 4)))
authors
authors.new <- within(authors,{ surname <- name; rm(name) }) 
authors.new  # 构建著作信息表
books <- data.frame(name = I(c("Tukey", "Venables", "Tierney","Ripley", "Ripley", "McNeil", "R Core")),other.author = c(NA, "Ripley", NA, NA, NA, NA,"Venables & Smith"),title = c("Exploratory Data Analysis","Modern Applied Statistics with S-PLUS","LISP-STAT","Spatial Statistics", "Stochastic Simulation","Interactive Data Analysis","An Introduction to R"),publishers = c("Addison-Wesley","Springer","Wiley-Interscience","Springer","Wiley-Interscience","Wiley","Samurai Media Limited"),year = c(1977,1994,1990,1988,2006,1992,2015))
books

合并有相同列名的数据框

merge(authors,books,by = "name")

合并没有相同列名的数据框

merge(authors.new,books,by.x = "surname",by.y = "name")

四、分组和汇总

 cut()函数

x <- rnorm(20,10,5)
# 按c(min(x),5,10,15,max(x))区间将x分成4个区间(组)
# include.lowest表示第一组是否包含最小值
cut(x,breaks = c(min(x),5,10,15,max(x)),include.lowest = T)# 可以为每一个组赋予标签
cut(x,breaks = c(min(x),5,10,15,max(x)),labels = c("第一组","第二组","第三组","第四组"),include.lowest = T)

# 实际应用中往往是在数据框中生成新列
a <- data.frame(x = x)
a$y <- cut(a$x,breaks = c(min(a$x),5,10,15,max(a$x)),labels = c("第一组","第二组","第三组","第四组"),include.lowest = T)
head(a)

split()函数

通过分组变量以列表的形式将向量或者数据框分割为若干组。

b <- split(a$x,a$y)
str(b)

unsplit()函数

将分组结果还原。

c <- unsplit(b,a$y)
c

rowsum()函数

分组求和。

rowsum(a$x,group = a$y)

 

table()与xtabs()函数

计算每一组的元素数量。

table(a$x)xtabs(~ x, a)

aggregate()函数

用于数据汇总。

library(reshape2)
# 按sex、smoker计算tips数据集中tatal_bill和tip的平均值
aggregate(tips[,c("total_bill","tip")],list(tips$sex,tips$smoker),mean)aggregate(cbind(total_bill,tip) ~ sex + smoker,data = tips,mean)

五、排序数据

sort()函数

常用于对数值向量或因子就行排序。

如果向量中有NA,sort()函数会自动舍弃掉,如果想要保留,可通过na.last参数控制。

sort()函数默认以升序排序,可通过设置decreasing参数TRUE,使其按照降序排序。

x <- c(1,4,3,7,8,9,1,NA)
sort(x)
sort(x, na.last=T, decreasing=T)y <- factor(rep(c("东","西","北","南"),3), levels = c("东","南","西","北"))
sort(y)

 rank()函数

此函数的操作对象是向量,它输出的结果为向量的秩,即排名

当向量中出现重复值时,其排名将受到ties.method参数的影响。

ties.method参数一共有7种:

  1. average:默认值。平均排名,即对于重复值,分配它们在所有可能排名中的平均排名。例如,如果有两个并列第二的数值,则它们都会被赋予2.5的排名
  2. first:升序排名,即对于重复值,分配它们的最小可能排名。即,如果排名是从1开始的,则所有重复值都会被赋予它们原本可以占据的最小排名。
  3. last:降序排名,即对于重复值,分配它们的最大可能排名。即,如果排名是从1开始的,则所有重复值都会被赋予它们原本可以占据的最大排名。
  4. random:随机排名,即对于重复值,随机分配它们可能的排名之一。每次运行可能会得到不同的结果。
  5. max:最大排名,与last一致
  6. min:最小排名,与first一致
  7. dense:与"average"相似,但分配的是连续排名。即,如果有两个并列第二的数值,则下一个数值的排名将是第四,而不是跳过第三。
x <- c(4, 2, 2, 8, 3, 3, 1)# 使用默认方法(即"average")
rank(x)
# 结果可能是: [1] 6.0 3.5 3.5 8.0 4.5 4.5 1.0# 使用"first"方法
rank(x, ties.method = "first")
# 结果可能是: [1] 6 2 2 8 4 4 1# 使用"last"方法
rank(x, ties.method = "last")
# 结果可能是: [1] 6 3 3 8 5 5 1# 使用"dense"方法
rank(x, ties.method = "dense")
# 结果可能是: [1] 5 2 2 7 3 3 1

 order()函数

用于返回向量中元素的排序索引。即order函数不会直接改变向量的顺序,而是返回一个整数向量,该向量指定了原始向量中元素在排序后应该出现的位置。

 order(x, decreasing = FALSE)

  • x:一个数值向量、字符向量或因子向量。
  • decreasing:一个逻辑值,指定是否按降序排序。默认为FALSE,即按升序排序。

它返回一个整数向量,该向量给出了x中元素在排序前(升序或降序)的索引位置

x <- c(4, 2, 8, 3, 1)# 按升序排序
sorted_indices <- order(x)
sorted_indices
# 结果可能是: [1] 5 2 4 1 3;因为元素1最开始的索引是5,元素2最开始的索引是2,依次类推(这里有点绕)# 使用排序索引获取排序后的向量
sorted_x <- x[sorted_indices]
sorted_x
# 结果: [1] 1 2 3 4 8# 按降序排序
sorted_indices_desc <- order(x, decreasing = TRUE)
sorted_indices_desc
# 结果可能是: [1] 3 1 4 2 5# 使用排序索引获取降序排序后的向量
sorted_x_desc <- x[sorted_indices_desc]
sorted_x_desc
# 结果: [1] 8 4 3 2 1

六、增加数据

with()函数:增加一列数据

作用是对当前数据构建一个环境,并在该环境中计算表达式。

tips1 <- tips
# 在tips1中增加一列cost(总消费)
tips1$cost <- with(tips1, total_bill + tip)
head(tips1)# 使用$符号
tips1$cost <- tips$total_bill + tips$tip

within()和transform()函数:增加多列数据

tips2 <- tips
# 增加两列数据:总消费cost和人均消费avg.cost
tips2 <- within(tips2,{cost=total_bill + tipavg.cost=cost/size})
head(tips2)

within()函数中新生成的变量(上例中的cost)可以被后续的代码调用,而trnasform()函数新生成的变量则无法被后续的代码调用,如下所示: 

tips3 <- tips
tips3 <- transform(tips3, cost=total_bill + tip, avg.cost=cost/size)

tips3 <- tips
tips3 <- transform(tips3, cost=total_bill + tip, avg.cost=(total_bill+tip)/size)

 

 

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

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

相关文章

51单片机之使用Keil uVision5创建工程以及使用stc-isp进行程序烧录步骤

一、Keil uVision5创建工程步骤 1.点击项目&#xff0c;新建 2.新建目录 3.选择目标机器&#xff0c;直接搜索at89c52选择&#xff0c;然后点击OK 4.是否添加起吊文件&#xff0c;一般选择否 5.再新建的项目工程中添加文件 6.选择C文件 7.在C文件中右键&#xff0c;添加…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

apachePoi中XSSFClientAnchor图片坐标简述;填充多张图片

概述 业务中经常会遇到在单元格内填充图片的需求&#xff0c;而且要求指定图片在单元格内的位置。 一般都是用的apache的poi&#xff0c;设置图片坐标。 HSSFClientAnchor(int dx1, int dy1, int dx2, int dy2, short col1, int row1, short col2, int row2)dx1 dy1 起始单元…

Centos挂载镜像制作本地yum源,并补装图形界面

内网环境centos7.9安装图形页面内网环境制作本地yum源 上传镜像到服务器目录 创建目录并挂载镜像 #创建目录 cd /mnt/ mkdir iso#挂载 mount -o loop ./CentOS-7-x86_64-DVD-2009.iso ./iso #前面镜像所在目录&#xff0c;后面所挂载得目录#检查 [rootlocalhost mnt]# df -h…

ssti学习笔记(服务器端模板注入)

目录 一&#xff0c;ssti是什么 二&#xff0c;原理 所谓模板引擎&#xff08;三列&#xff0c;可滑动查看&#xff09; 三&#xff0c;漏洞复现 1&#xff0c;如何判断其所属的模板引擎&#xff1f; 2&#xff0c;判断清楚后开始注入 &#xff08;1&#xff09;Jinja2&a…

【前端】Python 闭包与JavaScript闭包的实现差异

目录 Python 闭包JavaScript 闭包 推荐超级课程&#xff1a; Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战 Python 闭包 如何定义&#xff1a; 在一个函数内部定义另一个函数&#xff0c;内部函数引用外部函数的变量。 def outer_function(text):…

【JVM详解二】常量池

一、常量池概述 JVM的常量池主要有以下几种&#xff1a; class文件常量池运行时常量池字符串常量池基本类型包装类常量池 它们相互之间关系大致如下图所示&#xff1a; 每个 class 的字节码文件中都有一个常量池&#xff0c;里面是编译后即知的该 class 会用到的字面量与符号引…

人工智能入门 数学基础 线性代数 笔记

必备的数学知识是理解人工智能不可或缺的要素&#xff0c;今天的种种人工智能技术归根到底都建立在数学模型之上&#xff0c;而这些数学模型又都离不开线性代数&#xff08;linear algebra&#xff09;的理论框架。 线性代数的核心意义&#xff1a;世间万事万物都可以被抽象成某…

C# Winform怎么设计串口,客户端和相机控件界面显示

首先我们必须把这个类创建好 INIAPI using System; using System.Text; using System.Runtime.InteropServices;namespace Ini {public class IniAPI{#region INI文件操作/** 针对INI文件的API操作方法&#xff0c;其中的节点&#xff08;Section)、键&#xff08;KEY&#x…

在 Windows 上使用 ZIP 包安装 MySQL 的详细步骤

以下是使用官方 ZIP 包在 Windows 上安装 MySQL 的详细步骤&#xff0c;确保能通过 mysql -uroot -p 成功连接。 步骤 1&#xff1a;下载 MySQL ZIP 包 访问 MySQL 官方下载页面&#xff1a; https://dev.mysql.com/downloads/mysql/选择 Windows (x86, 64-bit), ZIP Archive&…

el-table表格点击单元格实现编辑

使用 el-table 和 el-table-column 创建表格。在单元格的默认插槽中&#xff0c;使用 div 显示文本内容&#xff0c;单击时触发编辑功能。使用 el-input 组件在单元格中显示编辑框。data() 方法中定义了 tableData&#xff0c;tabClickIndex: null,tabClickLabel: ,用于判断是否…

Windows逆向工程入门之汇编环境搭建

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 Visual Studio逆向工程配置 基础环境搭建 Visual Studio 官方下载地址安装配置选项(后期可随时通过VS调整) 使用C的桌面开发 拓展可选选项 MASM汇编框架 配置MASM汇编项目 创建新项目 选择空…

手写一个C++ Android Binder服务及源码分析

手写一个C Android Binder服务及源码分析 前言一、 基于C语言编写Android Binder跨进程通信Demo总结及改进二、C语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.h代码实现3.2 BnHelloService.c…

DeepSeekMoE 论文解读:混合专家架构的效能革新者

论文链接&#xff1a;DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models 目录 一、引言二、背景知识&#xff08;一&#xff09;MoE架构概述&#xff08;二&#xff09;现有MoE架构的问题 三、DeepSeekMoE架构详解&#xff08;一&a…

[每周一更]-(第133期):Go中MapReduce架构思想的使用场景

文章目录 **MapReduce 工作流程**Go 中使用 MapReduce 的实现方式&#xff1a;**Go MapReduce 的特点****哪些场景适合使用 MapReduce&#xff1f;**使用场景1. 数据聚合2. 数据过滤3. 数据排序4. 数据转换5. 数据去重6. 数据分组7. 数据统计8.**统计文本中单词出现次数****代码…

【C++高并发服务器WebServer】-13:多线程服务器开发

本文目录 一、多线程服务器开发二、TCP状态转换三、端口复用 一、多线程服务器开发 服务端代码如下。 #include <stdio.h> #include <arpa/inet.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <pthread.h>s…

「vue3-element-admin」告别 vite-plugin-svg-icons!用 @unocss/preset-icons 加载本地 SVG 图标

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode︱ Gitee ︱ Github &#x1f496; 欢迎点赞 &#x1f44d; 收藏 ⭐评论 …

C#中深度解析BinaryFormatter序列化生成的二进制文件

C#中深度解析BinaryFormatter序列化生成的二进制文件 BinaryFormatter序列化时,对象必须有 可序列化特性[Serializable] 一.新建窗体测试程序BinaryDeepAnalysisDemo,将默认的Form1重命名为FormBinaryDeepAnalysis 二.新建测试类Test Test.cs源程序如下: using System; us…

深度学习在医疗影像分析中的应用

引言 随着人工智能技术的快速发展&#xff0c;深度学习在各个领域都展现出了巨大的潜力。特别是在医疗影像分析中&#xff0c;深度学习的应用不仅提高了诊断的准确性&#xff0c;还大大缩短了医生的工作时间&#xff0c;提升了医疗服务的质量。本文将详细介绍深度学习在医疗影像…

计算机领域QPM、TPM分别是什么并发指标,还有其他类似指标吗?

在计算机领域&#xff0c;QPM和TPM是两种不同的并发指标&#xff0c;它们分别用于衡量系统处理请求的能力和吞吐量。 QPM&#xff08;每分钟请求数&#xff09; QPM&#xff08;Query Per Minute&#xff09;表示每分钟系统能够处理的请求数量。它通常用于衡量系统在单位时间…