R语言数据结构-----向量

简介: R语言数据结构-----向量

1)创建向量

#使用c()函数创建向量,括号内为各个元素,用逗号分隔
x <- c(1, 2, 3, 4, 5)  # 数值型向量
y <- c("a", "b", "c")   # 字符型向量
z <- c(TRUE, FALSE)     # 逻辑型向量
#使用:运算符创建向量
> 5:8
[1] 5 6 7 8
> 5:1
[1] 5 4 3 2 1
> i<-2
> 1:i-1  #意思为(1:i)-1
[1] 0 1
> 1:(i-1)
[1] 1
#使用seq()创建向量
> seq(from=12,to=30,by=3)
[1] 12 15 18 21 24 27 30
> seq(from=1,to=2,length=10)
 [1] 1.000000 1.111111 1.222222 1.333333 1.444444 1.555556 1.666667
 [8] 1.777778 1.888889 2.000000
#使用seq()重复向量常数
> x<-rep(8,4)
> x
[1] 8 8 8 8
> rep(c(5,12,13),3)
[1]  5 12 13  5 12 13  5 12 13
> rep(1:3,2)
[1] 1 2 3 1 2 3
> rep(c(5,12,13),each=2)
[1]  5  5 12 12 13 13

(2)访问元素

#使用方括号[]访问向量中的元素,索引从1开始。
x <- c(1, 2, 3, 4, 5)
x[3]  # 访问第3个元素,输出为3

(3)添加或删除向量元素

> x<-c(88,5,12,13)
> x<-c(x[1:3],168,x[4])#在13前面添加168
> x
[1]  88   5  12 168  13

(4)获取向量长度

> x<-c(1,2,4)
> length(x)
[1] 3
#向量长度一般运用于for()循环中
> first1<-function(x){
+ for(i in 1:length(x)){
+ if(x[i]==1) break
+ }
+ return(i)
+ }
注意这里不能使用for(n in x):因为它不能获得所需元素的索引
若length(x)=0
> x <- c()
> x
NULL
> length(x)
[1] 0
> 1:length(x)
[1] 1 0
#循环过程中,变量i先取值为1,然后取值0
怎么解决这个问题
for(i in 1:length(x))
改为
for(i in seq(x))
#seq(x)能正确计算出空值,导致上面迭代0次
> x<-c(5,12,13)
> x
[1]  5 12 13
> seq(x)
[1] 1 2 3
> x<-NULL
> seq(x)
integer(0)


(5)切片操作

#使用方括号[]和冒号:进行切片操作,可以选择向量中的子集
x <- c(1, 2, 3, 4, 5)
x[2:4]  # 输出:2 3 4

(6)矩阵和数组本质上都是向量

> m<-matrix(c(1:4),nrow=2)
> m
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> m+10:13
     [,1] [,2]
[1,]   11   15
[2,]   13   17

(7)循环补齐

> c(1,2,4)+c(6,0,9,20,22)
[1]  7  2 13 21 24
Warning message:
In c(1, 2, 4) + c(6, 0, 9, 20, 22) :
  longer object length is not a multiple of shorter object length
> c(1,2,4,1,2)+c(6,0,9,20,22)
[1]  7  2 13 21 24
> x<-matrix(c(1:6),nrow=3)
> x
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6
> x+c(1,2)
     [,1] [,2]
[1,]    1+1   4+2
[2,]    2+2   5+1
[3,]    3+1   6+2
(1,2,1,2,1,2)循环+


(8)向量运算

> 2+3
[1] 5
> "+"(2,3)
[1] 5
> x<-c(1,2,4)
> x+c(5,0,-1)
[1] 6 2 3
> x*c(5,0,-1)
[1]  5  0 -4
> x<-c(1,2,4)
> x/c(5,4,-1)
[1]  0.2  0.5 -4.0
> x%%c(5,4,-1)
[1] 1 2 0
除了以上向量运算符,还有一个运算符">"
> u<-c(5,2,8)
> v<-c(1,3,9)
> u>v
[1]  TRUE FALSE FALSE
因为5>1,所以为TRUE,其他同理,为false


(9)向量索引

> y<-c(1.2,3.9,0.4,0.12)
> y[c(1,3)]
[1] 1.2 0.4
> y[2:3]
[1] 3.9 0.4
> v<-3:4
> y[v]
[1] 0.40 0.12
> x<-c(4,2,17,5)
> y<-x[c(1,1,3)]
> y
[1]  4  4 17
#负数的下标表示我们想把相应元素剔除
> z<-c(5,12,13)
> z[-1]
[1] 12 13
> z[-1:-2]
[1] 13
#使用length()减去最后一个元素
> z<-c(5,12,13)
> z[1:(length(z)-1)]
[1]  5 12
> z[-length(z)]
[1]  5 12


(10)向量输入,矩阵输出

> z<-function(z){
+ return (c(z,z^2))
+ }
> x<-1:8
> z(x)
 [1]  1  2  3  4  5  6  7  8  1  4  9 16 25 36 49 64
用矩阵方式输出
> matrix(z(x),ncol=2)
     [,1] [,2]
[1,]    1    1
[2,]    2    4
[3,]    3    9
[4,]    4   16
[5,]    5   25
[6,]    6   36
[7,]    7   49
[8,]    8   64
也可以用sapply()函数
> z<-function(z){
+ return (c(z,z^2))
+ }
> sapply(1:8,z)
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    2    3    4    5    6    7    8
[2,]    1    4    9   16   25   36   49   64

(11)NA和NULL值

#从下面的例子可以看出,如果有1个NA,那么计算的结果都为NA,na.rm=T,表示移除NA
#而R会自动跳过空置(NULL)
> x<-c(88,NA,12,168,13)
> x
[1]  88  NA  12 168  13
> mean(x)
[1] NA
> mean(x,na.rm = T)
[1] 70.25
> x<-c(88,NULL,12,168,13)
> mean(x)
[1] 70.25
#在不同向量中NA的模式不同
> x<-c(5,NA,12)
> mode(x[1])
[1] "numeric"
> mode(x[2])
[1] "numeric"
> y<-c("abc","def",NA)
> mode(y[2])
[1] "character"
> mode(y[3])
[1] "character"
#NULL可以创建一个向量,每迭代一个,就在这个向量上增加一个元素
> z<-NULL
> for(i in 1:10)
+ if(i%%2==0)
+ z<-c(z,i)
> z
[1]  2  4  6  8 10
> z<-NA
> for(i in 1:10)
+ if(i%%2==0)
+ z<-c(z,i)
> z
[1] NA  2  4  6  8 10
#所以NULL是作为不存在而计数的
#以下例子看得更加明显
> u<-NULL
> length(u)
[1] 0
> v<-NA
> length(v)
[1] 1


(12)筛选

#筛选实际上是对布尔值进行筛选,例如
> z<-c(5,2,-3,8)
> j<-z*z>8
> j
[1]  TRUE FALSE  TRUE  TRUE
> y<-c(1,2,30,5)
> y[j]
[1]  1 30  5
#通过布尔值筛选,只有TRUE才会输出
> z<-c(5,2,-3,8)
> y<-c(1,2,30,5)
> y[z*z>8]
[1]  1 30  5
#这里更加直观,一定要注意理解,这里我们将z*z>8的结果作为向量y的索引,输出符合条件的y,即y[索引]
#这个代码将x>3的数都换为0
> x[x>3] <- 0
which也同理,根据索引输出结果
first1<-function(x){
+ for(i in 1:length(x)){
+ if(x[i]==1)
+ break
+ }
+ return(i)
+ }
以上代码是找出向量中第一个1,可以用which写为
> first1<-function(x)
+ return (which(x==1)[1])


(13)ifelse函数

ifelse()函数的格式为ifelse(b,u,v)


b表示一个布尔值,u,v为向量,如果b[i]为真,返回u[i],如果b[i]为假,返回v[i]


#例一
> x<-1:10
> y<-ifelse(x%%2==0,5,12)
> y
 [1] 12  5 12  5 12  5 12  5 12  5
#例二
> x<-c(5,2,9,12)
> ifelse(x>6,2*x,3*x)
[1] 15  6 18 24
(14)测量向量相等
> x<-1:3
> y<-c(1,3,4)
> x==y
[1]  TRUE FALSE FALSE
#这样是不可行的
#原因是==是一个向量化的函数,语句x==y是将函数==()应用到x和y的每一组元素中,得到布尔值向量
#应该运用all()函数
> x<-1:3
> y<-c(1,3,4)
> x==y
[1]  TRUE FALSE FALSE
> x<-1:3
> y<-c(1,3,4)
> x==y
[1]  TRUE FALSE FALSE
> all(x==y)
[1] FALSE
#也可以使用identical()函数
> identical(x,y)
[1] FALSE
#但是实际上identical()函数,是判断两个对象是否完全一样
> x<-1:2
> y<-c(1,2)
> x
[1] 1 2
> y
[1] 1 2
> identical(x,y)
[1] FALSE
> typeof(x)
[1] "integer"
> typeof

[1] "double"


(15)向量元素的名称

> x<-c(1,2,4)
> names(x)
NULL
> names(x)<-c("a","ab","abc")
> names(x)
[1] "a"   "ab"  "abc"
> x
  a  ab abc 
  1   2   4 
> names(x)<-NULL
> x
[1] 1 2 4
#可以用名称来引用向量中的元素
> x<-c(1,2,4)
> names(x)<-c("a","ab","abc")
> x["ab"]
ab 
 2


(16)c()中不同类型优先级排序

字符型>复数型>数值型>逻辑型>整数型


> c(5,2,"abc")
[1] "5"   "2"   "abc"
> c(5,2,list(a=1,b=4))
[[1]]
[1] 5
[[2]]
[1] 2
$a
[1] 1
$b
[1] 4

(17)向量的扁平化效果


> c(5,2,c(1.5,6))
[1] 5.0 2.0 1.5 6.0


目录
相关文章
|
1月前
|
索引
R语言数据结构-----列表
R语言数据结构-----列表
13 3
|
1月前
|
索引
R语言中的数据结构----矩阵
R语言中的数据结构----矩阵
22 3
|
1月前
|
机器学习/深度学习 数据可视化 算法
R语言独立成分分析fastICA、谱聚类、支持向量回归SVR模型预测商店销量时间序列可视化
R语言独立成分分析fastICA、谱聚类、支持向量回归SVR模型预测商店销量时间序列可视化
|
1月前
|
存储 数据处理 数据库
R语言入门:基础语法和数据结构
【4月更文挑战第25天】本文为R语言初学者提供入门指南,介绍R语言起源、安装配置、基本语法、数据类型和结构、数据操作以及统计和图形绘制。R语言是强大的统计分析工具,拥有丰富数据处理功能和活跃社区。通过学习变量赋值、控制结构、向量、矩阵、数组、数据框和列表,以及数据导入导出、筛选修改,可奠定R语言基础。掌握基础后,可进一步探索其在统计计算和图形绘制中的应用。
|
1月前
|
机器学习/深度学习 搜索推荐 数据挖掘
R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据
R语言矩阵特征值分解(谱分解)和奇异值分解(SVD)特征向量分析有价证券数据
|
1月前
|
算法
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
|
1月前
|
机器学习/深度学习 人工智能 数据可视化
【视频】R语言支持向量回归SVR预测水位实例讲解|附代码数据
【视频】R语言支持向量回归SVR预测水位实例讲解|附代码数据
|
1月前
|
数据可视化 前端开发 计算机视觉
R语言时变向量自回归(TV-VAR)模型分析时间序列和可视化
R语言时变向量自回归(TV-VAR)模型分析时间序列和可视化
|
1月前
|
数据可视化
R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
|
1月前
R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系