R语言基础(四):数据类型

news2024/9/22 19:35:58

R语言基础(一):注释、变量
R语言基础(二):常用函数
R语言基础(三):运算

5.数据类型

5.1 基本数据类型

R语言基本数据类型大致有六种:

整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、原型Raw

其中整数和浮点数也可以归类为数字类型numeric。数字默认是浮点数double(小数),整数后面加上字母L才是整数。

字符串:单引号或双引号包裹起来,比如:“hello,world”、‘My name is MengLaoShi’

逻辑:也叫布尔型,只有TRUE和FALSE两个值。注意TRUE是布尔型,而’TRUE’是字符串

复合类型表示虚数,虚数单位是i

原型:是以一种二进制形式存储的数据

可以使用typeof()函数查看数据类型

> typeof(TRUE)
[1] "logical"
> typeof(2)  #数字中的浮点型
[1] "double"
> typeof(3L) #整数后面加一个L代表整数类型
[1] "integer"
> typeof(3+2i) #复合类型,虚数
[1] "complex"
> typeof("hello") #字符型
[1] "character"
> charToRaw("a")  #raw类型(原型)
[1] 61

字符串有一些常用的操作,

> a='hi'
> b='R'
> paste(a,b)  #连接字符串,默认空格
[1] "hi R"
> paste(a,b,sep=",")  #指定连接符
[1] "hi,R"
> nchar("Google")  #获取字符串长度
[1] 6
> toupper('a')  #转换大写
[1] "A"
> tolower('a')  #转换小写
[1] "a"
> substring('abcdefg',2,4)  #截取字符串
[1] "bcd"
> format(11.23456789, digits = 5)  #转成字符串,显示n位数,四舍五入
[1] "11.235"
> format(13.7, width = 6)  #转化成长度为6的字符串,左边补空格
[1] "  13.7"

5.2 对象类型【重点】

在这里插入图片描述

5.2.1 向量(vector)

R语言中的向量和数学中的向量类似,创建向量使用c()函数

> a=c(1,2)
> b=c(2,4)
> a+b   #向量加法
[1] 3 6 #对应位置的相加
> b[1]  #获取向量中的某个元素,索引从1开始
[1] 2
> a[4]  #索引超出范围
[1] NA

向量有些常用的函数

> a=c(4,8,6,2)
> sort(a) #排序(升序)
[1] 2 4 6 8
> order(a) #返回排序后的索引
[1] 4 1 3 2
> a[order(a)] #通过排序后的索引,拿到有序的向量
[1] 2 4 6 8
> rev(a) #反转原向量
[1] 2 6 8 4

如果生成连续序列的向量,可以使用如下形式:

> a=1:5
> a
[1] 1 2 3 4 5
> a=5:1
> a
[1] 5 4 3 2 1
> sum(a)  #向量中元素求和
[1] 15
> sum(1:5)#向量中元素求和
[1] 15
> mean(a) #向量中元素求平均值
[1] 3
> var(a)  #向量中元素求方差
[1] 2.5
> sd(a)	  #向量中元素求标准差
[1] 1.581139
> min(a)  #向量中元素求最小值
[1] 1
> max(a)  #向量中元素求最大值
[1] 5
> range(a)#向量中元素最大值和最小值(得一个二维向量)
[1] 1 5
> seq(1, 9, 2) #从1到9,方差为2的等差序列
[1] 1 3 5 7 9
> seq(0, 1, length.out=5) #指定0开始,1结束,共生成5个数的等差数列
[1] 0.00 0.25 0.50 0.75 1.00
> rep(0, 4)  #产生重复序列
[1] 0 0 0 0

5.2.2 因子(factor)

因子用于存储不同值的数据,创建因子使用 factor() 函数,向量作为输入参数。

> color_vector=c('红','黄','红','绿') #向量
> color_factor=factor(color_vector)  #生成因子
> color_factor
[1] 红 黄 红 绿 
Levels: 红 黄 绿   #不重复的

5.2.3 矩阵(matrix)

矩阵是一种二维行列的数据结构。

> m=matrix(c(1,2,3,4,5,6),2,3)  #把一个向量转变成2行3列的矩阵(按列填充)
> m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> m=matrix(c(1,2,3,4,5,6),nrow=2,ncol=3) #把向量转变成2行3列的矩阵,同上
> m
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
#把向量转变成2行3列的矩阵,先填充行
> m=matrix(c(1,2,3,4,5,6),2,3,byrow=TRUE) 
> m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> m=matrix(c(1,2,3,4,5,6),nrow=2,ncol=3,byrow=TRUE) #同上
> m
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
> m[1,2]  #通过坐标(索引)访问第1行第2个元素
[1] 2
> m[2,3]
[1] 6
> colnames(m) = c("x", "y", "z")  #给每一列起别名
> rownames(m) = c("a", "b")   #给每一行起别名
> m
  x y z
a 1 3 5
b 2 4 6

矩阵运算:

> m1=matrix(c(1:6),2,3)
> m2=matrix(c(5:10),2,3)
> m1
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> m2
     [,1] [,2] [,3]
[1,]    5    7    9
[2,]    6    8   10
> m1+m2
     [,1] [,2] [,3]
[1,]    6   10   14
[2,]    8   12   16
> m1*m2    #对应位置元素相乘
     [,1] [,2] [,3]
[1,]    5   21   45
[2,]   12   32   60
> m3=matrix(c(1:6),3,2)
> m3
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> m1 %*% m3   #数学中的矩阵相乘
     [,1] [,2]
[1,]   22   49
[2,]   28   64
> m4=matrix(1:4,2,2) #逆矩阵
> m4
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> solve(m4)   #逆矩阵
     [,1] [,2]
[1,]   -2  1.5
[2,]    1 -0.5
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> apply(m4, 1, sum)   #第二个参数为1按行操作,用 sum() 函数
[1] 4 6
> apply(m4, 2, sum)   #第二个参数为2按列操作
[1] 3 7

5.2.4 数组(array)

数组是一个多维结构,存储同一种类型的数据集合。向量可以看做一维数组,矩阵是二维数组。创建数组使用array()函数,参数是一个向量,默认是一维数组。

> a=array(1:5)  #一维数组
> a
[1] 1 2 3 4 5
> b=array(1:5,dim=c(3,4,2)) #每个矩阵3行4列,共2个矩阵(元素循环填充)
> b
, , 1

     [,1] [,2] [,3] [,4]
[1,]    1    4    2    5
[2,]    2    5    3    1
[3,]    3    1    4    2

, , 2

     [,1] [,2] [,3] [,4]
[1,]    3    1    4    2
[2,]    4    2    5    3
[3,]    5    3    1    4
> b[3,2,1]  #第1个矩阵的第2列第3行的元素
[1] 1
> b[3,,1]   #第1个矩阵的第3行
[1] 3 1 4 2
> b[,3,1]   #第1个矩阵的第3列
[1] 2 3 4
> matrix1=b[,,1]  #取出第一个矩阵
> matrix1
     [,1] [,2] [,3] [,4]
[1,]    1    4    2    5
[2,]    2    5    3    1
[3,]    3    1    4    2

5.2.5 列表(list)

列表可以存放不同类型的数据,可以是数字、字符串、向量、另一个列表、矩阵、数组等

> alist <- list("Hello",  c(11,22,33), TRUE, 1:5, 119.1, array(5:10),matrix(1:6,nrow=2,ncol=3))
> alist
[[1]]
[1] "Hello"

[[2]]
[1] 11 22 33

[[3]]
[1] TRUE

[[4]]
[1] 1 2 3 4 5

[[5]]
[1] 119.1

[[6]]
[1]  5  6  7  8  9 10

[[7]]
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6
> alist[1]  #访问列表元素
[[1]]
[1] "Hello"
> blist=list(3:4)  #将两个list合并
> clist=c(alist,blist)
> unlist(alist)   #列表转换为向量
 [1] "Hello" "11"    "22"    "33"    "TRUE"  "1"     "2"     "3"     "4"     "5"     "119.1" "5"     "6"     "7"     "8"     "9"     "10"    "1"     "2"     "3"     "4"     "5"     "6"   

5.2.6 数据框(data frame)

数据框(有的也叫数据帧)是特殊的二维表结构,有行列,每一列长度要一致,同一列的元素数据类型要相同(不同列可以不同),每一列都有唯一列名。

> table = data.frame(
+     姓名 = c("张三", "李四"),
+     工号 = c("001","002"),
+     月薪 = c(1000, 2000)
+ )
> table
  姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000
> str(table)  #查看信息
'data.frame':   2 obs. of  3 variables:
 $ 姓名: chr  "张三" "李四"
 $ 工号: chr  "001" "002"
 $ 月薪: num  1000 2000
> names(table) #查看列名
[1] "姓名" "工号" "月薪"
> nrow(table)  #查看一共几行
[1] 2
> ncol(table)  #查看一共几列
[1] 3
> data=table(姓名,月薪)
Error in table(姓名, 月薪) : 找不到对象'姓名'
> data=data.frame(table$姓名,table$月薪)  #根据列名提取数据
> data
  table.姓名 table.月薪
1       张三       1000
2       李四       2000
> data=table[2,1]   #读第2行第1列
> data
[1] "李四"
> data=table[c(1,2),c(2,3)]  #读1~2行的2~3列
> data
  工号 月薪
1  001 1000
2  002 2000
> table
  姓名 工号 月薪
1 张三  001 1000
2 李四  002 2000
> table$性别=c("男","男")  #添加一列
> table
  姓名 工号 月薪 性别
1 张三  001 1000   男
2 李四  002 2000   男
> newtable = data.frame(
+     姓名 = c("小明", "小白"),
+     工号 = c("101","102"),
+     性别 = c("男", "女"),
+     月薪 = c(5000, 7000)
+ )
> rbind(table,newtable)  #合并两个数据框
  姓名 工号 月薪 性别
1 张三  001 1000   男
2 李四  002 2000   男
3 小明  101 5000   男
4 小白  102 7000   女

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

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

相关文章

基于Docker快速搭建蜜罐Dionaea(30)

实验目的 1. 快速搭建Dionaea蜜罐 2. 使用Nmap扫描测试Dionaea蜜罐预备知识1. 初步认识Dionaea dionaea&#xff0c;中文的意思即捕蝇草&#xff0c;是否形容蜜罐很形象&#xff1f;dionaea是nepenthes&#xff08;猪笼草&#xff09;的发展和后续&#xff0c;更加容易被部署和…

华大单片机、STM32单片机如何做printf串口打印格式化输出

第一种方法&#xff1a;使用标准C库&#xff0c;但使用标准C库你必须关闭半主机模式&#xff08;1&#xff09;添加下面代码就是关闭半主机模式/* 告知连接器不从C库链接使用半主机的函数 */ #pragma import(__use_no_semihosting)/* 定义 _sys_exit() 以避免使用半主机模式 */…

【项目日志】电商后台管理项目日志

技巧 对脚手架框架的梳理 使用脚手架建立项目后默认初始页面非空白&#xff0c;可以自行设置成空白页&#xff0c;将app.vue中的内容和样式清空即可router中的不必要的路由设置可以清除 如何右键打开powershell&#xff1f; 按住shift在空白处单击右键&#xff08;win10和2…

一个故事看懂CPU的SIMD技术

好久不见&#xff0c;我叫阿Q&#xff0c;是CPU一号车间的员工。我所在的CPU有8个车间&#xff0c;也就是8个核心&#xff0c;咱们每个核心都可以同时执行两个线程&#xff0c;就是8核16线程&#xff0c;那速度杠杠滴。 我所在的一号车间&#xff0c;除了负责执行指令的我&…

蓝牙5.4出来了,实现单个接入点与数千个终端节点双向通讯

蓝牙技术联盟最近发布了蓝牙5.4的核心规范&#xff0c;蓝牙5.4规范的主要改进之一就是实现了单个接入点与数千个终端节点进行双向无连接通信&#xff0c; 这一特性主要是针对电子货架标签市场。蓝牙5.4有哪些改进和新功能&#xff1f;蓝牙技术联盟最近发布了蓝牙5.4的核心规范&…

保姆级使用PyTorch训练与评估自己的EVA网络教程

文章目录前言0. 环境搭建&快速开始1. 数据集制作1.1 标签文件制作1.2 数据集划分1.3 数据集信息文件制作2. 修改参数文件3. 训练4. 评估5. 其他教程前言 项目地址&#xff1a;https://github.com/Fafa-DL/Awesome-Backbones 操作教程&#xff1a;https://www.bilibili.co…

【大数据处理与可视化】二 、Numpy科学计算库

【大数据处理与可视化】一 、大数据分析环境搭建&#xff08;安装 Anaconda 3 开发环境&#xff09;实验目的实验内容实验步骤1、创建一个值域范围从10到49的向量。2、创建一个 3x3 并且值从0到8的矩阵。3、创建一个 3x3 的单位矩阵。4、创建一个数组&#xff0c;数组的shape为…

第十四届蓝桥杯三月真题刷题训练——第 7 天

目录 第 1 题&#xff1a;三角回文数 问题描述 答案提交 运行限制 代码&#xff1a; 第 2 题&#xff1a;数数 问题描述 答案提交 运行限制 代码&#xff1a; 第 3 题&#xff1a;倍数问题_同余定理_分情况讨论 题目描述 输入描述 输出描述 输入输出样例 运行限…

Azure Portal 访问安全性增强

Azure Portal 访问安全性增强客户需求如何设置账号&#xff08;包括Admin&#xff09;定期修改密码&#xff0c;例如强制每90天必须修改密码如何设定账号密码的复杂性要求如何设定限制访问Azure Portal的源IP Address客户需求 为了增强访问Azure Portal的安全性&#xff0c;希…

JavaWeb--ListenerAjaxaxiosjson

Listener&Ajax&axios1 Listener1.1 概述1.2 分类1.3 代码演示2 Ajax2.1 概述2.1.1 作用2.1.2 同步和异步2.2 快速入门2.2.1 服务端实现2.2.2 客户端实现2.2.3 测试2.3 案例2.3.1 分析2.3.2 后端实现2.3.3 前端实现2.4 测试3 axios3.1 基本使用3.2 快速入门3.2.1 后端实…

32*4VKL128 LQFP44超低功耗/超低工作电流/抗干扰LCD液晶段码驱动IC/LCD驱动芯片(IC) 适用于激光/红外线测距仪

产品型号&#xff1a;VKL128产品品牌&#xff1a;永嘉微电/VINKA封装形式&#xff1a;LQFP44产品年份&#xff1a;新年份原厂&#xff0c;工程服务&#xff0c;技术支持&#xff01;VKL128概述:VKL128是一个点阵式存储映射的LCD驱动器&#xff0c;可支持最大128点&#xff08;3…

BSN-DDC基础网络详解(五):接入DDC网络(1)

BSN-DDC基础网络推出已经一年了&#xff0c;得到了行业应用方和广大开发者的高度认可。一年中BSN产品技术团队也在根据市场业务需求不断更新功能服务&#xff0c;我们将通过本系列文章为大家系统化介绍DDC网络的功能和使用&#xff0c;为感兴趣的朋友提供学习帮助。01支持DDC的…

PACS系统源码 PACS源码 三维重建PACS源码

一、系统概述&#xff1a; ​基于VC MSSQL开发的一套三甲医院医学影像PACS系统源码&#xff0c;集成3D影像后处理功能&#xff0c;包括三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜、最大/小密度投影、心脏动脉钙化分析等功能。系统功能强大&#xff0c;代码…

pcx文件丢失原因和三种恢复方法

你是否在使用设备过程中出现pcx文件丢失现象呢&#xff1f;对于丢失的pcx文件你是如何恢复的呢&#xff1f;您可以尝试本文推荐的三种方法。关于pcx格式文件pcx是一种图像文件格式&#xff0c;是由ZSOFT公司开发的经过压缩、支持256种彩色的图像文件格式&#xff0c;pcx是在pc机…

无线网络设置

5.在广州分公司的内网创建无线的 SSID 为 Test-GZ_XX(XX 现场提供)&#xff0c;WLAN ID 为 1&#xff0c;AP-Group 为 GZ。在吉林分公司的内网中创建无线 SSID 为 Test-JL_XX(XX 现场提供)&#xff0c;WLAN ID 为 2&#xff0c;AP-Group 为 JL。在北京总部内网 中创建无线的 SS…

NoneBot2,基于Python的聊天机器人

NoneBot2&#xff0c;基于Python的聊天机器人第一步&#xff0c;配置python第二步&#xff0c;配置[go-cqhttp](https://github.com/Mrs4s/go-cqhttp)第三步&#xff0c;配置[NoneBot](https://61d3d9dbcadf413fd3238e89--nonebot2.netlify.app/)NoneBot2 是一个现代、跨平台、…

日读300篇文献的技巧

感觉自己看文章很慢&#xff0c;有时候也抓不住重点。 如果是英文文献的话&#xff0c;可能还要有点难度&#xff0c;毕竟英语渣渣还是需要有中文-》英文的转换过程。 最近在搞毕业论文的时候&#xff0c;发现了一个非常好玩的东西&#xff0c;大大提升了我看文章搞科研&#x…

idea maven:Unable to import maven project /idea maven工程加载报错

文章目录前言一、报错截图二、设置maven三、更换maven版本前言 idea工具中导入maven工程有时候会遇到Unable to import maven project的报错&#xff0c;并且pom依赖中的依赖包没有加载出来&#xff0c;这里总结一下我遇到的问题与解决方法。 系统环境&#xff1a;jdk 1.8 m…

Docker的可视化界面工具

Docker的可视化界面工具1. Portainer1.1 Introduction1.1.1 Official1.2 Download And Deploy1.3 Dashboard1.3.1 Dashboard2. Shipyard2.1 Introduction2.1.1 Character2.1.2 Official2.2 Download And Deploy2.2.1 脚本下载镜像2.2.2 执行脚本2.2.2 查看下载的镜像2.3 Dashbo…

【学习Docker(八)】Docker Canal的安装与卸载

座右铭&#xff1a;《坚持有效输出&#xff0c;创造价值无限》 最近想了解下canal&#xff0c;自行搭建并完成数据同步。经过了几天的踩坑之旅&#xff0c;今天终于搭建成功了。 环境&#xff1a;canalv1.1.5、MySQL8.0、JDK1.8 安装MySQL 创建存放目录 mkdir /docker-localm…