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

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

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")   #给每一行起别名
> mx 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$月薪)  #根据列名提取数据
> datatable.姓名 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   女

相关文章:

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

R语言基础(一)&#xff1a;注释、变量 R语言基础(二)&#xff1a;常用函数 R语言基础(三)&#xff1a;运算 5.数据类型 5.1 基本数据类型 R语言基本数据类型大致有六种&#xff1a; 整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、…...

批处理命令--总结备忘「建议收藏」

批处理命令--总结备忘「建议收藏」 前言1、基础语法:2、批处理基本命令3、实例3.1 打开虚拟目录3.2 以当前时间为文件名,建文件夹3.3 备份postgresql数据库前言 最近用批处理命令做了一些postgresql数据库的备份,打开虚拟环境。。。发现批处理处理一些常用重复工作时真的很…...

面试知识点梳理及相关面试题(十一)-- docker

1. Docker和虚拟机的区别 容器不需要捆绑一整套操作系统&#xff0c;它只需要满足软件运行的最小内核就行了。 传统虚拟机技术是虚拟出一整套硬件后&#xff0c;在其上运行一个完成操作系统&#xff0c;在该系统上再运行所需应用进程容器内的应用进程直接运行于宿主的内核&am…...

k8s--services(微服务)

文章目录一、k8s网络通信service和iptables的关系二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式&#xff08;1&#xff09;nodeport&#xff08;2&#xff09;loadbalancer7.metallb一、k8s网络通信 k8s通过CNI接口接入其他…...

【Java开发】设计模式 01:单例模式

1 单例模式介绍单例模式&#xff08;Singleton Pattern&#xff09;是Java中最为基础的设计模式。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单个对…...

10、go工程化与标准库

目录一、用go mod管理工程二、包引入规则三、init调用链四、可见性五、标准库1 - 时间函数2 - 数学计算3 - I/O操作4 - 编码一、用go mod管理工程 初始化项目&#xff1a;go mod init $module_name&#xff0c;$module_name和目录名可以不一样。上述命令会生成go.mod文件 mod…...

【Selenium自动化测试】鼠标与键盘操作

在 WebDriver 中&#xff0c;与鼠标操作相关的方法都封装在ActionChains 类中&#xff0c;与键盘操作相关的方法都封装在Keys类中。下面介绍下这两个类中的常用方法。 鼠标操作 ActionChains类鼠标操作常用方法&#xff1a; context_click()&#xff1a;右击double_click()&…...

自定义javax.validation校验枚举类

枚举类单一情况 package com.archermind.cloud.phone.dto.portal.external.validation.validator;import com.archermind.cloud.phone.dto.portal.external.validation.constraints.EnumValidation; import lombok.extern.slf4j.Slf4j;import javax.validation.ConstraintVali…...

[Java·算法·中等]LeetCode39. 组合总和

每天一题&#xff0c;防止痴呆题目示例分析思路1题解1分析思路2题解2&#x1f449;️ 力扣原文 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形…...

【Linux】vi和vim编辑器

目录主题主题 三种常见模式&#xff1a; 正常模式 以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中&#xff0c;你可以使用[上下左右]按键来移动光标&#xff0c;你可以使用『删除字符』或『删除整行』来处理档案内容&#xff0c;也可以使用「复制、…...

BIO,NIO,AIO

IO模型 用什么样的通道进行数据传输和接收&#xff0c;java支持3种io网络编程模式 BIO NIO AIO BIO 同步阻塞 一个客户端连接对应一个处理线程 BIO示例代码&#xff08;客户端和服务端&#xff09; package com.tuling.bio;import java.io.IOException; import java.net.So…...

代码随想录刷题-数组-有序数组的平方

文章目录有序数组的平方习题暴力排序双指针有序数组的平方 本节对应代码随想录中&#xff1a;代码随想录&#xff0c;讲解视频&#xff1a;有序数组的平方_哔哩哔哩_bilibili 习题 题目链接&#xff1a;977. 有序数组的平方 - 力扣&#xff08;LeetCode&#xff09; 给你一…...

【玩转c++】stack和queue的介绍和模拟实现

本期主题&#xff1a;list的讲解和模拟实现博客主页&#xff1a; 小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限&#xff0c;出现错误希望大家不吝赐stack的介绍和使用1.1.stack的介绍1. stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上…...

Linux order(文件、磁盘、网络、系统管理、备份压缩)

1. Linux 文件命令 -rwxrwxrwx chmod&#xff1a;change mode&#xff0c;用于&#xff08;文件所有者或 root &#xff09;变更用户(u:owner g:group o:other a:all)的权限 chmod [OPTION]… MODE[,MODE]… FILE… OPTION -R&#xff1a;递归修改more option&#xff1a;chmod…...

最详细的CentOS7安装Mysql数据库服务

1.查看是否安装mysql: rpm -qa | grep mysql如果有查出来东西&#xff0c;使用命令删除&#xff1a; rpm -e xxx2.检查是否有mysql用户组和mysql用户,没有就添加有就忽略&#xff1a; groups mysql 添加用户组和用户 groupadd mysql && useradd -r -g mysql mysql&a…...

【IoT】项目管理:如何做好端到端的项目管理?

今天主要来谈谈项目管理这个话题。 首先来看一个我在网络上看到的一个关于项目管理的案例或者是段子。 将项目管理的作用及意义非常直观地展示了出来。 有一个植树搞绿化的企业&#xff0c;在公司内部设置有五个部门&#xff0c;分别是&#xff1a; 运输部门&#xff1b;挖坑部…...

渲染十万条数据就把你难住了?不存在的!

虚拟列表的使用场景如果我想要在网页中放大量的列表项&#xff0c;纯渲染的话&#xff0c;对于浏览器性能将会是个极大的挑战&#xff0c;会造成滚动卡顿&#xff0c;整体体验非常不好&#xff0c;主要有以下问题&#xff1a;页面等待时间极长&#xff0c;用户体验差CPU计算能力…...

编程学习的心路历程和困惑回顾

回首入行9年的经历&#xff0c;从大一开始学习C语言和数据结构&#xff0c;老师一直是在用IDE演示程序的编写和运行&#xff0c;我们也就一直在跟黑乎乎的命令行窗口打交道。 后来在一些课程的实验环节&#xff0c;接触到了一些别人编写好的工程代码&#xff0c;知道了Makefile…...

请介绍类加载过程,什么是双亲委派模型?

第23讲 | 请介绍类加载过程&#xff0c;什么是双亲委派模型&#xff1f; Java 通过引入字节码和 JVM 机制&#xff0c;提供了强大的跨平台能力&#xff0c;理解 Java 的类加载机制是深入 Java 开发的必要条件&#xff0c;也是个面试考察热点。 今天我要问你的问题是&#xff0…...

Navisworks编辑材质和Revit快速切换材质问题

一、如何在Navisworks2016中编辑材质 初次使用NW2016-2017时发现&#xff0c;原来用于创建编辑材质的小地球不见了&#xff0c;如图1所示&#xff0c;在各大技术群里求助没有回应&#xff0c;度娘搜索也总是摇头。 经过仔细排查可能出现的地方&#xff0c;终于找到了可以编辑材…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...