当前位置: 首页 > news >正文

【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)

 

 

相关文章:

【R语言】数据操作

一、查看和编辑数据 1、查看数据 直接打印到控制台 x <- data.frame(a1:20, b21:30) x View()函数 此函数可以将数据以电子表格的形式进行展示。 用reshape2包中的tips进行举例&#xff1a; library("reshape2") View(tips) head()函数 查看前几行数据&…...

MariaDB MaxScale实现mysql8主从同步读写分离

一、MaxScale基本介绍 MaxScale是maridb开发的一个mysql数据中间件&#xff0c;其配置简单&#xff0c;能够实现读写分离&#xff0c;并且可以根据主从状态实现写库的自动切换&#xff0c;对多个从服务器能实现负载均衡。 二、MaxScale实验环境 中间件192.168.121.51MaxScale…...

【python】简单的flask做页面。一组字母组成的所有单词。这里的输入是一组字母,而输出是所有可能得字母组成的单词列表

目录结构如下&#xff1a; https://github.com/kaede316/Pythons_pj.git 效果&#xff1a; 后续可扩展为工具网站&#xff1a; 更新 2025.02.09 1、增加等间距制作人 时间信息 2、增加判断润年的功能...

单片机之基本元器件的工作原理

一、二极管 二极管的工作原理 二极管是一种由P型半导体和N型半导体结合形成的PN结器件&#xff0c;具有单向导电性。 1. PN结形成 P型半导体&#xff1a;掺入三价元素&#xff0c;形成空穴作为多数载流子。N型半导体&#xff1a;掺入五价元素&#xff0c;形成自由电子作为多…...

吴恩达深度学习——卷积神经网络的特殊应用

内容来自https://www.bilibili.com/video/BV1FT4y1E74V&#xff0c;仅为本人学习使用。 文章目录 人脸识别相关定义Similarity函数使用Siamese网络实现函数d使用Triplet损失学习参数 神经风格迁移深度卷积网络可视化神经风格迁移的代价函数内容损失函数风格损失函数 人脸识别 …...

安宝特方案 | AR助力制造业安全巡检智能化革命!

引言&#xff1a; 在制造业中&#xff0c;传统巡检常面临流程繁琐、质量波动、数据难以追溯等问题。安宝特AR工作流程标准化解决方案&#xff0c;通过增强现实AR技术&#xff0c;重塑制造业安全巡检模式&#xff0c;以标准化作业流程为核心&#xff0c;全面提升效率、质量与…...

Unity-Mirror网络框架-从入门到精通之Discovery示例

文章目录 前言Discovery示例NetworkDiscoveryNetworkDiscoveryHUDServerRequestServerResponse最后前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Un…...

项目的虚拟环境的搭建与pytorch依赖的下载

文章目录 配置环境 pytorch的使用需要安装对应的cuda 在PyTorch中使用CUDA, pytorch与cuda不同版本对应安装指南&#xff0c;查看CUDA版本&#xff0c;安装对应版本pytorch 【超详细教程】2024最新Pytorch安装教程&#xff08;同时讲解安装CPU和GPU版本&#xff09; 配置环境…...

现代前端工程化实践:高效构建的秘密

一、前端工程化错误监控 这种监控可以帮助开发人员及时发现和解决问题&#xff0c;提高应用程序的稳定性和可靠性。 1. Sentry&#xff1a;Sentry是一款开源的错误监控平台&#xff0c;可以监控前端、后端以及移动端应用程序中的错误和异常。Sentry提供了实时错误报告、错误分…...

ARM Linux Qt使用JSON-RPC实现前后台分离

文章目录 1、前言2、解决方案2.1、JSON-RPC2.2、Qt中应用JSON-RPC的框架图2.3、优点2.4、JSON-RPC 1.0 协议规范 3、程序示例3.1、Linux C&#xff08;只例举RPC Server相关程序&#xff09;3.2、Qt程序&#xff08;只例举RPC Client相关程序&#xff09; 4、编译程序4.1、交叉…...

【C++篇】C++11新特性总结1

目录 1&#xff0c;C11的发展历史 2&#xff0c;列表初始化 2.1C98传统的{} 2.2&#xff0c;C11中的{} 2.3&#xff0c;C11中的std::initializer_list 3&#xff0c;右值引用和移动语义 3.1&#xff0c;左值和右值 3.2&#xff0c;左值引用和右值引用 3.3&#xff0c;…...

【Nginx + Keepalived 实现高可用的负载均衡架构】

使用 Nginx Keepalived 可以实现高可用的负载均衡架构&#xff0c;确保在某个 Nginx 节点故障时&#xff0c;自动将流量转移到备用节点。以下是详细的实现步骤&#xff1a; 1. 架构概述 Nginx&#xff1a;作为负载均衡器&#xff0c;将流量分发到后端服务器。Keepalived&…...

使用外骨骼灵活远程控制协作机器人案例

外骨骼控制器采用可调节结构&#xff0c;简化了机器人编程&#xff0c;使协作机器人 FR3 的远程控制变得容易。 一、引言 在开发机器人手臂或双臂系统的应用程序时&#xff0c;经常会遇到以下挑战&#xff1a; 1. 使用拖动和示教进行定位的困难&#xff1a;拖动和示教功能通常…...

Centos Stream 10 根目录下的文件夹结构

/ ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib64 ├── lostfound ├── media ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/sbin ├── srv ├─…...

python连点器

要实现一个用于抖音点赞的鼠标连点工具&#xff0c;可以通过编程或现有软件实现。以下是两种常见方法&#xff08;但请注意&#xff1a;频繁自动化操作可能违反平台规则&#xff0c;需谨慎使用&#xff09;&#xff1a; 方法 1&#xff1a;使用现成工具&#xff08;如 AutoClic…...

STM32G474--Whetstone程序移植(单精度)笔记

1 准备基本工程代码 参考这篇笔记从我的仓库中选择合适的基本工程&#xff0c;进行程序移植。这里我用的是stm32g474的基本工程。 使用git clone一个指定文件或者目录 2 移植程序 2.1 修改Whetstone.c 主要修改原本变量定义的类型&#xff0c;以及函数接口全部更换为单精度…...

Spring Boot 3.4 中 MockMvcTester 的新特性解析

引言 在 Spring Boot 3.4 版本中&#xff0c;引入了一个全新的 MockMvcTester 类&#xff0c;使 MockMvc 测试可以直接支持 AssertJ 断言。本文将深入探讨这一新特性&#xff0c;分析它如何优化 MockMvc 测试并提升测试的可读性。 Spring MVC 示例 为了演示 MockMvcTester 的…...

java 读取sq3所有表数据到objectNode

1.实现效果&#xff1a;将sq3中所有表的所有字段读到objectNode 对象中&#xff0c;兼容后期表字段增删情况&#xff0c;数据组织形式如下图所示&#xff1a; 代码截图&#xff1a; 代码如下&#xff1a; package com.xxx.check.util;import java.sql.*; import java.util.Arr…...

网络计算机的五个组成部分

单个计算机是无法进行通信的。所以需要借助网络。 下面介绍一些在网络里常见的设备。 一、服务器 服务器是在网络环境中提供计算能力并运行软件应用程序的特定IT设备 它在网络中为其他客户机&#xff08;如个人计算机、智能手机、ATM机等终端设备&#xff09;提供计算或者应用…...

jakarta EE学习笔记-个人笔记

WebServlet注解&#xff1a;声明一个类为Servlet Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented public interface WebServlet {// 指定Servlet的影子String name() default ""; // 匹配地址映射(URL)String[] value() default {};// …...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...