R的数据结构--向量

向量:用于存储数值型、字符型或逻辑型数据的一维数组,只可以包含一种数据

向量的创建与运算

创建向量

# 创建简单向量
l <- c(2, 2, 1, 3, 8)
# [1] 2 2 1 3 8

# 创建一个1至5的向量
# :  -->  至
# 1:5  -->  从1到5的5个整数
n <- 1:5
# [1] 1 2 3 4 5

# 创建向量,初始默认为逻辑值FALSE
v <- vector(length = 4)
# [1] FALSE FALSE FALSE FALSE

基本运算

# 切片运算
# 注意R中的序号1就表示第1个,而不是2个,要与python相区别
n[1:4]
# [1] 1 2 3 4

# 基本运算
# 等长
a1 <- l + n
# [1]  3  4  4  7 13
a2 <- l / n
# [1] 2.0000000 1.0000000 0.3333333 0.7500000 1.6000000

# 不等长
# 较少元素的向量在运算完一遍以后将会重新对应较多元素的向量中的剩余元素逐个再从头运算一次
n <- 1:5
l <- c(1,1,1,1,1,2,2,2,2,2)
a <- n * l 
# [1]  1  2  3  4  5  2  4  6  8 10

两个方便创建向量的函数

seq函数 - 建立等差数列

# 建立从2到10,间隔为2的等差数列
n <- seq(from=2, to=10, by=2)  # 或 n <- seq(2, 10, 2)
# [1]  2  4  6  8 10

rep函数 - 元素的重复

  • rep(起始值:终止值, times = 重复次数)  -->  将整一个向量重复n次
  • rep(起始值:终止值, each = 重复次数)  -->  将向量的每个元素依次重复n次

  若直接写数字,则是第一种times

# 把1到4赋值给x
x=1:4
# 把向量x重复2次
rep(x,2)
# 等价于 rep(1:4,2)
# [1] 1 2 3 4 1 2 3 4

# 把“male”和“female”和2各重复5次
# each=5
rep(c("male","female",2),each=5)
# 等价于  rep(c("male","female",2),c(5,5,5))
# 次数步长可自定义
"""
 [1] "male"   "male"   "male"   "male"   "male"   "female" "female" "female"
 [9] "female" "female" "2"      "2"      "2"      "2"      "2"  
"""

# times=5
rep(c("male","female",2),5)
"""
[1] "male"   "female" "2"      "male"   "female" "2"      "male"   "female"
 [9] "2"      "male"   "female" "2"      "male"   "female" "2" 
"""

# 也可设置最大长度
# length.out也可以简写为length或len
rep(c("male","female",2),5,length.out=12)
"""
 [1] "male"   "female" "2"      "male"   "female" "2"      "male"   "female"
 [9] "2"      "male"   "female" "2" 
"""

# each和times可同时使用
rep(c(3,5,7),each=3,times=2)
# [1] 3 3 3 5 5 5 7 7 7 3 3 3 5 5 5 7 7 7

删除向量

# rm(向量名)
rm(x)

访问向量中的元素

访问指定位置上的元素

  • 向量名[位置常量]
  • 向量名[位置常量1:位置常量2]
  • 向量名[c(位置常量列表)]
# 创建10个元素向量
v <- vector(length = 10) 
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

# 访问第1个元素,赋值为1
v[1] <- 1
# [1] 1 0 0 0 0 0 0 0 0 0

# 访问第2~4个元素,赋值为2,3,4
v[2:4] <- c(2,3,4)
# [1] 1 2 3 4 0 0 0 0 0 0

# 生成一个取值为5~9的序列给向量w
w <- seq(5,9,1)
# [1] 5 6 7 8 9 

# 访问第5~9和第10个元素,赋值为5~10
# c(w, 10)的访问方式,可以有效实现多个向量的合并
v[c(5:9,10)] <- c(w,10) 
# [1]  1  2  3  4  5  6  7  8  9 10

利用位置向量访问指定位置上的元素

v
# [1]  1  2  3  4  5  6  7  8  9 10

# 直接指定位置
w <- (2:4)
# [1] 2 3 4
v[w]
# [1] 2 3 4

# 利用逻辑型位置向量来访问
w <- c(T,F,F,T,F,F,F,F,F,F)
# 访问v中位置向量w取值为TRUE位置上的元素
v[w] 
# [1] 1 4

访问指定位置之外的元素

# 访问除了第1个元素以外的元素
v[-1] 
# [1]  2  3  4  5  6  7  8  9 10 

# # 访问除了2~4元素以外的元素
v[-(2:4)] 
# [1]  1  5  6  7  8  9 10

v[-c(5:9,10)]
# [1] 1 2 3 4

w
# [1]  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
v[-w]
# [1]  2  3  4  5  6  7  8  9 10

猜你喜欢

转载自www.cnblogs.com/zry-yt/p/11981340.html
今日推荐