R语言—向量

news2024/11/29 8:34:14

向量(vector)

R 语言最基本的数据结构是向量。类似于数学上的集合的概念,由一个或多个元素构成。向量其实是用于存储数值型字符型、或逻辑型数据的一维数组

创建向量

c()函数

> a <- 1		#给a赋值1
> a				#显示a的值
[1] 1
> int_vec <- c (1L, 2L, 3L)	#用c()创建向量,L表示整数常数
> int_vec
[1] 1 2 3
> 2:5
[1] 2 3 4 5


  • R中不存在标量类型的数据,一个整数或字符也被看成长度为1的向量。
  • 用赋值的方式可以创建向量。
  • 用c()函数也可以创建向量。 c()可将参数中的多个元素组合成一个向量,在整数后面加上L创建整数类型值,否则,R会将数字自动处理为浮点型(double),使用 typeof (对象)判断对象的类型。
  • 还可以用符号“:”函数创建向量

✨如何创建一个向量1 2 3 4 5 8 0 6 7 8 9 ?

> x <- c(1:9)
> x
[1] 1 2 3 4 5 6 7 8 9

✨如何创建下图所示向量?

image-20220830111518272

> x <- c(2:5,letters,6:9)
> x
 [1] "2" "3" "4" "5" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k"
[16] "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
[31] "6" "7" "8" "9"
> a<-c(1, 3, 5, 7, 9)			#数值型向量
> a<-c(“one”,“two”,“three”)      	#字符型向量
> a<-c(TRUE,FALSE,TURE,TRUE)           #逻辑型向量
> a<-c(T,F,T)
> f<-3    #标量     
> g<-”HGU”  #标量     
> h<-TURE     #标量
 
> x<-c(1,2,"one")
> x
[1] "1"   "2"   "one"
  • 单个向量中的数据必须拥有相同的类型或模式。
  • 标量是只含一个元素的向量
  • 向量中包含数值型和字符型,向量的类型为字符型

✨c()不但能对数量进行连接,也能对向量进行连接

> y<-c(2,5,8,9,0)
> x<-c(y,-1,y) 
> x
 [1]  2  5  8  9  0 -1  2  5  8  9  0

✨对向量做逻辑运算,构造逻辑向量

> y<-c(2,5,8,9,0)
> Flag<-y>5
> Flag
[1] FALSE FALSE  TRUE  TRUE FALSE

seq()函数

提问:如果创建1-100的奇数列,如何进行?依然使用c函数吗?这里我们引入seq()函数

seq() 函数常见用法:

seq(from, to)
seq(from, to, by= )
seq(from, to, length.out= )
seq(along.with= )
seq(from)
seq(length.out= )

参数说明:

参数说明
from, to序列的起始值和(最大)结束值。长度为1,除非只是from作为未命名参数提供。
by序列的增量。也就是步长。
length.out序列长度。

通过下面的实例我们来学习一下:

#生成1-10
x1 <- seq(1,10)

#创建一个包含值0  3  6  9 12 15 18 21 24 27 30 33 36 39 42 45 48的向量
x2 <- seq(0,48,by=3)

#在1-100之间产生等间距的13个数
x3 <-seq(1,100,length.out = 13) 

#生成包含1~5的向量,
x4 <- seq(5)
x5 <- seq(length.out=5)

print(x1)
print(x2)
print(x3)
print(x4)
print(x5)

输出结果:

image-20220830162124844

rep()函数

重复向量常数,replicates,或者repeat

x2<-rep(1:4,c(1,2,3,4)) 省略了参数 times, times=c(1,2,3,4)更多示例请查看rep帮助信息rep()可以更方便的把同一常数放在长向量中情况1的times是一个标量,情况2的times是一个向量情况2:用来分别控制每个向量重复出现的次数,1:4有4个向量,则times需要提供一个向量并且长度为4https://zhuanlan.zhihu.com/p/246524031

x<-c("a","b","c")
y<-rep(x[c(3,2,1)],times=3)
[1] "c" "b" "a" "c" "b" "a" "c" "b" "a“

✨情况1:向量中所有元素重复相同次数

> x1<-rep(1:4,times=2)
> x1
[1] 1 2 3 4 1 2 3 4

✨情况2:与向量x等长times模式

> x2<-rep(1:4,times=c(1,2,3,4))
> x2
 [1] 1 2 2 3 3 3 4 4 4 4

这里的times是一个向量,用来分别控制每个向量重复出现的次数

✨情况3:与向量x非等长times模式,出现错误

> x3<-rep(1:4,times=c(1,2,3))
Error in rep(1:4, c(1, 2, 3)) : 'times'参数不对

✨情况4: each 参数控制每个元素重复次数

> x4<-rep(1:4,each=2)
> x4
[1] 1 1 2 2 3 3 4 4

✨情况5: times是单值,整个向量重复times次

> x5<-rep(1:4,each=2,times=2)
> x5
 [1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4

既有times又有each,先执行each。

✨情况6:

> x6<-rep(1:4,each=2,times=1:8)
> x6
 [1] 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

先应用each生成基本向量,即先应用each完成向量中每个元素的相同重复,在应用times重复1+2+3+…+8=36个向量

✨情况7:控制生成向量长度

> rep(1:4, each = 2, len = 4)  # first 4 only.
[1] 1 1 2 2

✨情况8:长度超过重复后的向量

> rep(1:4, each = 2, len = 10) 
 [1] 1 1 2 2 3 3 4 4 1 1

总结:

  • each指的是向量x中元素交替重复的次数
  • times指的是向量x整体重复的次数
  • 先each后times

R语言基本数据集中的向量

向量:

  • euro #欧元汇率,长度为11,每个元素都有命名
  • landmasses #48个陆地的面积,每个都有命名
  • precip #长度为70的命名向量
  • rivers #北美141条河流长度
  • state.abb #美国50个州的双字母缩写
  • state.area #美国50个州的面积
  • state.name #美国50个州的全称

示例如下:

> euro    #欧元汇率,长度为11,每个元素都有命名
        ATS         BEF         DEM         ESP         FIM         FRF         IEP         ITL         LUF 
  13.760300   40.339900    1.955830  166.386000    5.945730    6.559570    0.787564 1936.270000   40.339900 
        NLG         PTE 
   2.203710  200.482000 
> state.abb    #美国50个州的双字母缩写
 [1] "AL" "AK" "AZ" "AR" "CA" "CO" "CT" "DE" "FL" "GA" "HI" "ID" "IL" "IN" "IA" "KS" "KY" "LA" "ME"
[20] "MD" "MA" "MI" "MN" "MS" "MO" "MT" "NE" "NV" "NH" "NJ" "NM" "NY" "NC" "ND" "OH" "OK" "OR" "PA"
[39] "RI" "SC" "SD" "TN" "TX" "UT" "VT" "VA" "WA" "WV" "WI" "WY"

向量命名

可以用names()函数为向量中的元素命名

> score <- c(90,82,78,64)
> stu <- c("Linda","Lili","James","Mark")
> names(score) <- stu
> score
Linda  Lili James  Mark 
   90    82    78    64 

查询向量元素的名称

> x<-c(1,3,5)
> names(x)
NULL
> names(x)<-c("a1","a2","a3")
> x
a1 a2 a3 
 1  3  5 
> x["a2"]
a2 
 3 

向量的索引

a <- c(1, 3, 5, 7, 9);a[2]
[1] 3
> x<-10:20;x[c(1,3,5)]
[1] 10 12 14
> x[1:5]
[1] 10 11 12 13 14		
> x[c(1,2,1)]
[1] 10 11 10

  • 如果x为向量,x[i]表示向量x的第i个分量
  • 如果x是长度为n的向量,v为取值在1-n之间的数(允许重复)的向量,则x[v]是向量x中由v所表示的分量构成的向量。
  • 可以多次访问向量中的同一个元素

不同于C语言和Python语言,R中向量索引从1开始

> x<-10:20;x[-(1:5)]
[1] 15 16 17 18 19 20

> x<-c(1,4,7);x[x<5]
[1] 1 4

> ages<-c(zhao=20,qian=23,sun=24)
> ages
zhao qian  sun 
  20   23   24 

  • 如果x是长度为n的向量,v为取值在[-n,-1]之间的向量,则x[v]是向量x中去掉v所表示的分量构成的向量。
  • 如果x是向量,v为与它等长的逻辑向量,则x[v]表示取出所有v为真值的元素。使用逻辑向量访问向量的值是R语言的特色,第二个实例 x<5 返回一个逻辑向量 TRUE TRUE FALSE,根据逻辑向量选出1和4.
  • 在定义向量时,可以同时给元素加上名字,这个名字就称为字符下标。
#如果x中的向量是逻辑向量,只输出逻辑值为真的元素。
> x<-1:6;x[c(T,F,T,F,T,T)]
[1] 1 3 5 6

> x<-1:6;x[c(T)]
[1] 1 2 3 4 5 6

> x<-1:6;x[c(F)]
> integer(0) 

>  x<-1:6;x[c(T,F)]
[1] 1 3 5

> x<-1:6;x[c(F,T)]
[1] 2,4,6

> x<-1:10;x[c(T,F,T)]
[1] 1  3  4  6  7  9 10  

#向量索引中,索引值的个数多于向量元素个数,会产生缺失值
>  x<-1:6;x[c(T,T,T,F,F,F,T)]
[1] 1 2 3 NA

📙自动循环补长

R语言中的向量可以自动循环补长:

  • x[c(T)]实际上是补长为六个T;
  • x[c(F)]补长为六个F;
  • x[c(T,F)]则补齐为T F T F T F;
  • x[c(F,T)]补长为 F T F T F T

添加向量元素

R中向量是连续存储的,向量的大小在创建时就已经确定,因此,想要添加或者删除元素,需要重新给向量赋值。

c()函数

已知:向量x<-c(1,5,8,0),将一个元素39添加到向量x的中间

x<-c(x[1:2],39,x[3:4])
> x
[1]  1  5 39  8  0

这个过程似乎改变了x中存储的向量,实际上创建了新的向量并把它存储于x中。获取向量的长度length(x)也可以按照如下方式创建向量

> x<-vector(length=2)
> x[1]<-3
> x[2]<-4
> x
[1] 3 4

append()函数

利用append函数在向量的中间位置添加元素值

语法如下:

append(x, values, after = length(x))

参数说明:

参数说明
x要添加值的向量。
values要添加的内容
after下标,值要在其后面添加。

下面我们来看一个实例:

> x<-1:6
> append(x,99,3)
[1]  1  2  3 99  4  5  6

删除向量元素

rm()函数

rm()函数用于删除整个向量

> rm(x)
> x
Error: object 'x' not found

负号

有时我们只需要删除部分元素,可以使用下面这种方法:

> x<-1:6
> x
[1] 1 2 3 4 5 6
> x<-x[-c(1:3)]#去除前三个元素
> x
[1] 4 5 6

向量判断

any()函数

any()报告其参数是否至少一个为TRUE

> x<-1:10
> any(x>8)
[1] TRUE

x中存在大于8的,返回TRUE

> x<-1:10
> any(x>88)
[1] FALSE

x中不存在大于88的,返回FALSE

向量化的含义,意味着应用到向量上的函数实际上应用到每一个元素上

all()函数

all()报告其参数是否全部为TRUE.

> x<-1:10
> all(x>0)
[1] TRUE

x中的元素全部都大于0,返回TRUE

> x<-1:10
> all(x>1)
[1] FALSE

x中的元素并不全部都大于0,返回FALSE

测量向量是否相等

✨方法1:使用**==**号进行判断,逐元素进行判断

> x<-1:3
> y<-c(1,3,4)
> x==y
[1]  TRUE FALSE FALSE

✨方法2:使用 identical() 函数进行判断

> x<-1:3
y<-c(1,2,3)
> identical(x,y)
[1] FALSE

> z<-c(1L,2L,3L)
> identical(x,z)
[1] TRUE

结论:

  • 使用:创建的向量为整型向量
  • 使用C创建的向量为double型向量
  • identical()判断两个对象是否完全一致

向量计算

向量加法

✨情况1:向量与数相加

> x<-c(1:6)
> x
[1] 1 2 3 4 5 6
> x+1
[1] 2 3 4 5 6 7

向量与数相加等于向量中的每个元素与这个数相加

✨情况2:向量与向量相加(长度相等)

> x<-c(1:10)
> y<-seq(1,100,length.out = 10)
> x
 [1]  1  2  3  4  5  6  7  8  9 10
> y
 [1]   1  12  23  34  45  56  67  78  89 100
> x+y
 [1]   2  14  26  38  50  62  74  86  98 110

向量与向量相加(长度相等)等于向量中对应的元素相加

循环补齐

在对两个向量使用运算符时,如果要求两个向量具有相同的长度,R会自动循环补齐。即重复较短的向量,直到它与另一个向量长度相匹配。

✨例题1

> c(1:3)+c(1:4)
[1] 2 4 6 5
Warning message:
In c(1:3) + c(1:4) :
  longer object length is not a multiple of shorter object length
长的对象长度不是短的对象长度的整倍数

因为两个向量的长度不同,所以将第一个向量补齐为 1 2 3 1

✨例题2

> x<-matrix(1:6,nrow=3)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> x + c(1:2)
     [,1] [,2]
[1,]    2    6
[2,]    4    6
[3,]    4    8
> 

矩阵实际上是一个长向量,3*2的矩阵本质上是一个6个元素的向量,在R中逐列存储。换句话说,矩阵x 与向量c(1,2,3,4,5,6)相同。

which函数

which函数返回符合要求元素的下标。

✨例题1

#返回单个下标
> x<-c(1,5,7,9,0,8)
> which.max(x)
[1] 4
> which.min(x)
[1] 5
> which(x==5)
[1] 2

✨例题2

#返回多个下标
> which(x>5)
[1] 3 4 6
#利用下标返回符合要求的元素
> x[which(x>5)]
[1] 7 9 8

ple of shorter object length
长的对象长度不是短的对象长度的整倍数


因为两个向量的长度不同,所以将第一个向量补齐为 1 2 3 1

✨例题2

```R
> x<-matrix(1:6,nrow=3)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> x + c(1:2)
     [,1] [,2]
[1,]    2    6
[2,]    4    6
[3,]    4    8
> 

矩阵实际上是一个长向量,3*2的矩阵本质上是一个6个元素的向量,在R中逐列存储。换句话说,矩阵x 与向量c(1,2,3,4,5,6)相同。

which函数

which函数返回符合要求元素的下标。

✨例题1

#返回单个下标
> x<-c(1,5,7,9,0,8)
> which.max(x)
[1] 4
> which.min(x)
[1] 5
> which(x==5)
[1] 2

✨例题2

#返回多个下标
> which(x>5)
[1] 3 4 6
#利用下标返回符合要求的元素
> x[which(x>5)]
[1] 7 9 8

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

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

相关文章

【C++初阶】类和对象终极篇

文章目录一.加const修饰this指针二.cout<<自定义类型的对象的实现1.深入理解cout和<<2流插入和流提取3.友元函数的来源a.作为ostream成员函数b.作为全局函数c.作为Date类的成员函数d.作为Date类的友元函数三.再谈构造函数之初始化列表四.隐式类型转换&explicit…

Linux命令从入门到实战----文件目录类

文章目录pwd显示当前工作路径的绝对路径ls列出目录的内容cd切换目录mkdir 创建一个新的目录删除一个空的目录touch创建新文件cp复制文件或目rm删除文件或目录mv移动文件与目录&#xff0c;重命名文件cat查看文件内容&#xff0c;创建新文件more文件内容分屏查看less分屏显示文件…

【C语言】字符串、字符数组

目录 写在开头 正文 一、字符串的本质 二、输入函数scanf和gets 三、输出函数printf和puts 四、字符串的长度——strlen 五、字符串的复制——strcpy 六、字符串的比较函数 七、实战练习 八、二维字符数组——字符串数组 写在最后 写在开头 看了标题&#xff0c;是…

Kotlin编程实战——类与对象(05)

一 概述 类与继承属性和字段接口(interface )函数式&#xff08;SAM&#xff09;接口可见性修饰符扩展数据类(data class)密封类泛型嵌套类与内部类枚举类对象表达式与对象声明类型别名内联类(inline class)委托委托属性 二 类与继承 类继承(open override )抽象类(abstract)…

MySQL去重中 distinct 和 group by 的区别

今天在写业务需要对数据库重复字段进行去重时&#xff0c;因为是去重&#xff0c;首先想到的是distinct关键字。于是一小时过去了。。。。&#xff08;菜鸟一个&#xff0c;大家轻点骂&#xff09; 我把问题的过程用sql语句演示给大家演示一下 首先我使用的是mybatis-plus&am…

数据结构之哈希表

文章目录 一、概念二、哈希冲突三、如何解决哈希冲突&#xff1f; 1.哈希函数设计2.负载因子调节3.闭散列4.开散列&#xff08;哈希桶&#xff09;四、模拟实现哈希桶总结一、概念 顺序结构以及平衡树中&#xff0c;元素与其存储位置之间没有对应的关系&#xff0c;因此在查找一…

C++多态学习笔记

C多态学习笔记一、多态概述二、多态的作用三、多态发生的三个条件四、多态实现的原理五、接口的定义六、模板方法模式七、虚析构函数和纯虚析构函数7.1 虚析构函数7.2 纯虚析构函数八、重写重载重定义九、父类引用子类对象一、多态概述 同一个操作作用于不同的对象&#xff0c;…

2014年848数据结构真题复习

求k频度K0; for&#xff08;i1;i<n;i&#xff09; 假如是1——8&#xff0c;执行了9次&#xff0c;8次有效&#xff0c;最后一次无效for&#xff08;ji;j<n;j&#xff09;k 我的理解&#xff1a;假设n为8我们看k频度实际上就是看内圈for的有效循环次数第一轮是1——8 八次…

基础算法 第七课——归并排序

文章目录导言归并排序的概念步骤说明逐步分析STEP1STEP2STEP3STEP4STEP5STEP6STEP0总结导言 这&#xff0c;是一篇现学现卖的文章。因为&#xff0c;我根本没学过归并排序。所以&#xff0c;这篇文章&#xff0c;绝对能让您学懂归并。如果不懂&#xff0c;那我就再学一遍&…

KVM Forum 2022应该关注的话题

1. QEMU 和 KVM 自动性能基准测试 QEMU & KVM Automated Performance Benchmarking SUSE - Dario Faggioli, SUSE SUSE正在开发一个框架&#xff0c;用于对虚拟化工作负载进行自动性能基准测试。它是围绕着MMTests&#xff08;已经在Linux内核社区使用了几年&#xff09;建…

2022-Java 后端工程师面试指南 -(SSM)

前言 种一棵树最好的时间是十年前&#xff0c;其次是现在 Tips 面试指南系列&#xff0c;很多情况下不会去深挖细节&#xff0c;是小六六以被面试者的角色去回顾知识的一种方式&#xff0c;所以我默认大部分的东西&#xff0c;作为面试官的你&#xff0c;肯定是懂的。 上面的…

Mybatis之foreach

文章目录一、foreach属性二、使用foreach批量删除(法一)1.接口2.mapper文件3.测试类4.运行结果三、使用foreach批量删除(法二)1.mapper文件四、使用foreach批量插入1.接口2.mapper文件3.测试类4.运行结果一、foreach属性 collection&#xff1a;指定数组或者集合 item&#xf…

FPGA时序约束01——基本概念

前言1. 越来越多的时序问题 随着FPGA时钟频率加快与其实现的逻辑功能越来越复杂&#xff0c;开发者遇到的问题很多时候不再是代码逻辑的问题&#xff0c;而是时序问题。一些开发者可能有这样的经历&#xff0c;一个模块在100MHz时钟运行没问题&#xff0c;而将时钟频率改为150…

【仿牛客网笔记】 Spring Boot进阶,开发社区核心功能-事务管理

添加评论中会用到事务管理。 解决的程度不同&#xff0c;层级不同。我们一般选择中间的级别。 选择时既能满足业务的需要&#xff0c;又能保证业务的安全性&#xff0c;在这样的前提下我们追求一个更高的性能。 第一类丢失更新 图中是没有事务隔离的情况 第二类丢失更新 脏…

需求工程方法的学习

作业要求&#xff1a;总结尽可能多的需求工程的方法和技术&#xff0c;要求归纳总结各种方法的适用场景、优缺点等。说明&#xff1a;其中需求工程包括需求获取、需求分析、规格说明、验证、管理等。只要是用于需求工程相关的技术和方法都可以算。 软件需求工程划分为需求开发…

Linux 中 man手册中函数后面括号数字释义

文章目录简介参考资料简介 Linux手册页项目记录了用户空间程序使用的Linux内核和C库接口。 用man手册查看系统命令&#xff0c;系统调用&#xff0c;glibc函数时&#xff0c;会发现其后面会有个括号&#xff0c;括号里面是一个数字&#xff0c;比如&#xff1a; access(2), …

一文了解Spring框架

目录 SpringBoot VS Servlet Spring是什么&#xff1f; loC&#xff1a;控制反转 DI 创建一个Spring项目 创建一个Spring IOC容器 注册Bean对象 获取Bean对象 注意事项&#xff1a; 类注解 为什么有这么多类注解&#xff1f; 注册与注入 方法注解 Bean Spr…

《R语言数据分析》2022-2023第一学期课程分析报告

1 (30分)基本操作题 1.1 (10分) 请写出下面问题的R代码 1.(2分)安装并加载gtools扩展包。 install.packages(“gtools”) library(gtools) 2.(2分)查看当前已经加载的所有包。 as.data.frame(installed.packages())$Package 3.(2分)查看gtools包的帮助网页。 ?gtools…

《清单革命》内容梳理随笔

《清单革命》内容梳理&随笔 起 书即是将四散的知识按照逻辑和网状联系编排起来。你应该这样去读&#xff0c;高屋建瓴、层次有秩、显得貌似自己有经验&#xff08;褒义&#xff09;的读&#xff0c;读出一些感想和方法论&#xff0c;无论是读出书里的还是书外的&#xff…

【MySQL高级】SQL优化

5. SQL优化 5.1 大批量插入数据 环境准备 &#xff1a; CREATE TABLE tb_user_2 (id int(11) NOT NULL AUTO_INCREMENT,username varchar(45) NOT NULL,password varchar(96) NOT NULL,name varchar(45) NOT NULL,birthday datetime DEFAULT NULL,sex char(1) DEFAULT NULL,…