RStudio学习笔记(三):其他数据结构

1、矩阵    

        在R语言中,矩阵是二维的,包括行和列,其中分为数值型、字符型、逻辑型三种,在每个矩阵中的矩阵元素的类型必须一致,可以通过matrix函数创建矩阵。

m <- matrix(1:20, nrow = 4, ncol = 5)	
# 创建一个四行五列的数组,值为1到20,元素个数和行列必须对应
# 可以省略nrow和ncol,如:m <- matrix(1:20, 4, 5)m <- matrix(1:20, nrow = 4, ncol = 6)	
# 元素不够,循环使用数值		
# 报错:数据长度[20]不是矩阵列数[6]的整倍m <- matrix(1:20, nrow = 4, ncol = 4)	
# 元素过多,取前16个元素载入	m <- matrix(1:20, nrow = 3, ncol = 3)	
# 元素过多,取前 9 个元素载入	
# 报错:数据长度[20]不是矩阵列数[3]的整倍# 矩阵默认是按列进行排列的,上述也可省略为:	
m <- matrix(1:20, 4)	
# 会自动分为四行五列的矩阵进行排列m <- matrix(1:20, 4,byrow = T)	
# 按行进行四行五列的矩阵分配。byrow = F则设置为按列排列

        可以通过rnames函数和cnames函数分别对行和列进行命名

# 设置行名
rnames <- c("R1","R2","R3","R4")# 设置列名
cnames <- c("C1","C2","C3","C4","C5")dimnames(m) <- list(rnames,cnames)			
# 为上述矩阵命名,后续可用名称访问矩阵元素

        通过维度的添加,可以把向量转变为矩阵

x <- 1:20
# 创建一个向量xdim(x) <- c(4,5)	
# 为向量x添加维度(四行五列)
# 操作之后x的类型转变为矩阵

        矩阵的访问可以通过索引、名称等方式进行

# 其中矩阵m的创建通过上述的代码展示m[1,2]								
# 通过索引访问第一行第二列的元素,也可以通过名称访问,如:m["R1","C2"]m[c(2:4),c(2:3)]						# 访问矩阵的一个子集
m[2,]									# 访问矩阵的第二行
m[,2]									# 访问矩阵的第二列
m[2]									# 访问第二行的第一个元素
m[-1,2]								    # 访问除了第一行外的第二列元素

        矩阵的运算类似与向量的运算,需要保证行和列的关系

colSums(m,m)						# 计算每一列的和
rowSums(m)							# 计算每一行的和#假设两个三行三列的向量 
x <- matrix(1:9.3,3) 
y <- matrix(2:10.3,3)x*y									# 矩阵的内积,即矩阵的点乘,对应位置相乘
x %*% y								# 矩阵的外积,即矩阵的叉乘diag(x)								
# 输出一个向量,值依次返回矩阵的对角线的值,要求矩阵x的行数列数相同t(x)								# 输出x的转置矩阵

2、数组

        不同于其他编程语言,在R语言中,数组表示多为矩阵 。数组是多维的、数值或字符的数据集,可以看作是矩阵的推广。

        数组可以有多个维度,并且每个维度的大小可以不同。

        可以使用 array() 函数创建数组。

x <- 1:20
dim(x) <- c(2,2,5)	
# 为向量x添加三个维度# 利用array()函数创建数组
# 假设三个维度的标签值:
dim1 <- c("A1","A2")		
dim2 <- c("B1","B2","B3")		
dim3 <- c("C1","C2","C3","C4")z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
# 设置一个数组,数据为1到24,维度类型为(2,3,4),每个维度的名称为(dim1,dim2,dim3)

        其他的内容可参考矩阵的内容

3、列表

        列表是R中非常灵活的数据结构,可以包含不同类型的元素。

        列表是存储很多内容的一个集合,是一些对象的有序集合,可以存储若干向量、矩阵、数据框、其他列表,即可以存储任何数据结构,是一维数据的结合。

mlist <- list(a,b,c,d)						
# 创建列表mlist <- list(first = a, second = b, third = c , forth = d)	
# 创建列表并给每一部分命名mlist[1]		
class(mlist[1])								
# 利用索引访问列表的第一个列表元素
# 返回mlist[1]的数据类型,一个[ ]的输出类型仍为列表mlist[[1]]		
class(mlist[[1]])									
# 访问列表的第一个列表元素,且每次只能访问一个列表元素
# [[ ]]的输出类型为a,b,c,d的类型mlist[c(1,4)]									# 利用索引访问多个列表元素需要通过向量的方式
mlist[c("first","forth")]						# 通过名称访问对应的列表元素 	
mlist$first										
# 通过$符号对列表元素和名称进行访问,且数据类型等同于mlist[[1]],即原本向量的数据类型mlist[[5]] <- iris 				
# mlist[[5]]可以直接赋值。iris 是内置数据库				
# mlist[5]是一个列表,不能直接赋值mlist <- list(mlist[-5])								
# 删除第五个列表元素可以通过[-5]不显示第五个列表元素的方式进行赋值
mlist[[5]] <- NULL									
#空白赋值进行删除第五个列表元素

4、数据框 

        数据框实际上是一个列表,列表元素是向量,向量构成列,因此每列的长度必须相同,且每列必须命名,每列必须同一类型,每一行不必。

        表格式数据结构,由数据集合构成的矩形数组,行表示观测,列表示变量。

state <- data.frame(state.name,state.abb,state.region,state.x77)			
# 数据框的创建,其中数据都是内置数据集,关于美国五十个州的,每一列长度相同# 数据框是个列表,调出每一列方式同列表
state[1]										# 调出数据框第一列,数据类型为列表
state$state.name								# 调出数据框第一列,数据类型为矩阵plot(women$height,women$weight)								
# women是内置数据,可通过plot绘图,x轴为height,y轴为weighlm(weight ~height ,data = women)								
# 拟合线性模型: weight 是响应变量(因变量)作为左侧的项
# height 是预测变量(自变量)作为右侧的项
# 用~连接,并且数据来自名为 women 的数据框attach(mtcars)												
# 加载数据框,可以直接输入行名或者列名作为对象进行访问数据,不需要索引或者$符号等方式
detach(mtcars)												
# 删除加载,无法继续使用上述访问方法with(mtcars,{mpg})											
# 访问内置数据集mtcars中的mpg向量,注意是大括号

5、因子

        在R语言中,因子(Factor)是一种特殊的数据类型,用于处理分类数据。因子可以被视为名义型(Nominal,无序)或有序型(Ordinal,有顺序)的类别变量。

        在R语言中变量可以分为三个类型:

① 名义型变量:没有内在顺序的类别,比如城市、性别(男/女)、颜色(红/绿/蓝)等相互之间独立的变量。

② 有序型变量:有特定顺序的类别,比如质量评价(好、更好、最好)、教育水平(小学/中学/大学/研究生),不同值之间有顺序关系,但不是连续的数量变换。

③ 连续型变量:在某个范围内的任意值,比如年龄、gdp、具体高度等数据。

        factor,其分类变量的可能值称为一个水平,level。水平值构成的向量称为因子

        因子的应用: 计算频数、独立性实验、相关性实验、方差分析、主成分分析等。它们在统计分析中非常有用,尤其是在需要对数据进行分组或分类的情况下。

table(mtcars$cyl)											
# 对因子中的数据进行频数统计
# 其中cyl就是factor,其中的数据值(4,6,8)就是levelf <- factor(c("red","red","green","blue","green"))						
# 创建因子,其中 f 就是factor,("red","green","blue")就是levelweek <- factor(c("Mon","Thu","Fri","Sat","Sun","Tue","Wed"))			
# 创建的因子的level是按照输入的顺序来的w1 <- c("Mon","Thu","Fri","Sat","Sun","Tue","Wed")
w2 <- c("Mon","Tue","Wed","Thu","Fri","Sat","Sun")
week <- factor( w1 , ordered = T , levels = w2 )
# ordered为TRUE定为有序,再通过level设定具体顺序,其中level的设定都需要创建向量的c函数plot(mtcars$cyl)								# 绘制的是散点图
plot(factor(mtcars$cyl))						# 绘制的是柱状图cut(num,c(0,100,10))
# 假设num <- 1:100,cut函数将数据从1到100每十个进行一次划分,然后就变成因子了

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

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

相关文章

【工具分享】SQLmap

文章目录 工具介绍安装方式环境准备安装 sqlmap 工具介绍 sqlmap 是一个非常强大的自动化 SQL 注入工具&#xff0c;主要用于渗透测试和安全审计。它能够检测和利用 SQL 注入漏洞&#xff0c;进而访问数据库服务器。 GitHub&#xff1a;https://github.com/sqlmapproject/sql…

JS:防抖与节流函数的实现与应用

一、防抖 防抖&#xff1a;一连串操作只执行一次。通过设置一个延迟时间&#xff0c;如果这段时间没有再次执行操作则运行目标函数&#xff0c;否则重新计时。 下面是一个防抖函数代码&#xff1a; let a1; const add () > {a; }; const debounce (fun: Function, dela…

Everything 一款功能强大的搜索工具

要在电脑上使用Everything搜索文件&#xff0c;您需要使用以下步骤&#xff1a; 在您的电脑上下载并安装Everything软件。您可以从官方网站https://www.voidtools.com/downloads/下载最新版本的软件。 安装完成后&#xff0c;打开Everything软件。 在搜索栏中输入您要查找的文…

Java中如何处理大数据量的排序?

Java中如何处理大数据量的排序&#xff1f; 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们来讨论一下在Java中如何处理大数据量的排序问题…

JsonCpp:更简洁的序列化及反序列化

简介 jsoncpp 提供了一组简单易用的 API&#xff0c;使得在 C 程序中处理 JSON 数据变得更加方便和高效。 安装 linux环境下安装jsoncpp sudo apt-get update sudo apt-get install --reinstall libjsoncpp-dev建立软链接确保编译器找到头文件 #include <json/json.h>…

Java数据结构6-栈与队列

1. 栈(Stack) 1.1 概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则 压栈…

机电公司管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;管理员管理&#xff0c;客户管理&#xff0c;公告管理&#xff0c;考勤管理&#xff0c;请假管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;公告&#xff0c;机电零件&…

gitee配置ssh教程

生成公钥 执行命令&#xff1a; ssh-keygen -t rsa查看公钥 cat ~/.ssh/id_rsa.pub这个公钥就是要复制粘贴到Gitee中的ssh公钥。 配置Gitee SSH公钥 来到Gitee的ssh公钥中&#xff0c;配置

代码随想录算法训练营第四十六天| 121. 买卖股票的最佳时机 ,122.买卖股票的最佳时机II,123.买卖股票的最佳时机III

121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {if(prices.length 0){return 0;}int[][] dp new int[prices.length][2];dp[0][0] 0;dp[0][1] -prices[0];for(int i1;i<prices.length;i){dp[i][0…

Go环境安装---附带每一步截图

Windows环境 Go安装包下载 下载后直接安装步骤按照即可。 测试 winR 输入cmd 在命令行输出go version可以看到自己的版本。 go env 查看环境变量 在桌面创建hello.go的文件 编写代码。注意&#xff0c;编码必修是UTF-8 在命令行输入路径刚刚代码所在的路径&#x…

动态选线,动态的选择变量的位宽

一、原理 参考博客&#xff1a;&#xff1c;Verilog&#xff1e; 语法技巧&#xff1a;数据位操作_verilog移位操作-CSDN博客 下图是从作者的博客cv过来的一张图&#xff0c;讲的非常的清晰。实现了动态的选择选择数据的位宽&#xff0c;只需要动态的改变base_expr就可以。 …

笔记:Mysql 安装

1&#xff0c;下载安装包 mysql-5.7.44-linux-glibc2.12-x86_64.tar2&#xff0c;上传并解压 tar -vxf mysql-5.7.44-linux-glibc2.12-x86_64.tar .gz 文件使用 tar -zvxf mysql-5.7.44-linux-glibc2.12-x86_64.tar mv mysql-5.7.44-linux-glibc2.12-x86_64 mysql-5.7.443&a…

Python 潮流周刊#58:最快运行原型的语言

△△请给“Python猫”加星标 &#xff0c;以免错过文章推送 本周刊由 Python猫 出品&#xff0c;精心筛选国内外的 250 信息源&#xff0c;为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景&#xff1a;帮助所有读者精进 Python 技术&am…

暑假集中备考2024年汉字小达人:来做18道历年选择题备考吧

结合最近几年的活动安排&#xff0c;预计2024年第11届汉字小达人比赛还有4个多月就启动&#xff0c;那么孩子们如何利用这段时间有条不紊地准备汉字小达人比赛呢&#xff1f; 我的建议是充分利用即将到来的暑假&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0…

Python应用开发——30天学习Streamlit Python包进行APP的构建(12)

st.checkbox 显示复选框部件。 Function signature[source] st.checkbox(label, valueFalse, keyNone, helpNone, on_changeNone, argsNone, kwargsNone, *, disabledFalse, label_visibility"visible") Returns (bool) Whether or not the checkbox is checked. …

昇思25天学习打卡营第04天|数据集 Dataset

数据是深度学习的基础&#xff0c;高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎&#xff0c;通过数据集&#xff08;Dataset&#xff09;和数据变换&#xff08;Transforms&#xff09;实现高效的数据预处理。其中Dataset是Pipel…

【QT】设置QTabWidget样式:上、下边线的显示与去除

目录 0.简介 1.环境 2.详细介绍 2.1我的原代码和显示效果 2.2 去掉QTabWidget的边框 2.3 单独留下边线 2.3.1 法一&#xff1a;通过【this->setDocumentMode(true);】设置下边线 2.3.2 通过【QTabWidget::pane】设置下边线 2.4单独设置上边线 2.5 优化界面tab 2.…

STM32的SPI通信

1 SPI协议简介 SPI&#xff08;Serial Peripheral Interface&#xff09;协议是由摩托罗拉公司提出的通信协议&#xff0c;即串行外围设备接口&#xff0c;是一种高速全双工的通信总线。它被广泛地使用在ADC、LCD等设备与MCU间&#xff0c;使用于对通信速率要求较高的场合。 …

css 布局出现无法去除的空白

案件介绍&#xff1a;在没有设置任何的css样式的情况下 文字顶部出现无法去除的空白 源代码 <div click"onClick" ><div class"tableTextButton--container"></div><Icon v-if"loading || thisLoading" type"ios-lo…

LeetCode热题100刷题2:283. 移动零、11. 盛最多水的容器、15. 三数之和、42. 接雨水

283. 移动零 挺简单的没啥说的 class Solution { public:void moveZeroes(vector<int>& nums) {//快慢指针 // 快指针负责往前遍历&#xff0c;慢指针记录快指针遍历过的把0撵走的最后一个元素的位置// 然后快指针遍历完之后&#xff0c;慢指针到结尾直接赋0就行in…