向量
向量的创建
向量(vector)是多个值(数字、字符或逻辑值)的组合。创建向量可以使用c()
函数,c
代表concatenate
。
math_score <- c(60,75,87,99,22,44)
print(math_score)
## [1] 60 75 87 99 22 44
student_name <- c("A","B","C","D","E","F")
print(student_name)
## [1] "A" "B" "C" "D" "E" "F"
向量内元素的命名
向量中的值被称为元素(element)。使用names()
函数可以给向量内的元素命名。在创立向量时,也可以直接给元素命名。
# 使用 names() 函数
names(math_score) <- student_name
print(math_score)
## A B C D E F
## 60 75 87 99 22 44
# 创立向量时命名
english_score <- c("A"=85, "B"=70, "C"=42,"D"=95,"E"=39,"F"=67)
print(english_score)
## A B C D E F
## 85 70 42 95 39 67
向量长度的获取
获取向量长度可以使用length()
函数。
## [1] 6
向量内元素的提取
获取向量中的特定元素:
当知道元素名称时,可以根据元素名称获取元素。
有些向量并未给元素命名,此时也可以根据索引(index)获取元素。
注意:
元素的索引从1开始,直至最后一个元素(索引为向量的长度)。
当需要获取多个元素时,可以使用名称或者使用索引切片(slice)。
当需要获取连续的多个元素时,使用索引切片更为方便。
# 使用元素名称获取单个元素
math_score["A"]
## A
## 60
# 使用名称获取多个元素,注意需要使用c()生成向量
math_score[c("A","D")]
## A D
## 60 99
# 使用索引获取多个元素
math_score[c(1,4,5)]
## A D E
## 60 99 22
# 使用索引切片获取连续的多个元素
math_score[3:length(math_score)] # 顺序获取元素
## C D E F
## 87 99 22 44
math_score[length(math_score):3] # 逆序获取元素
## F E D C
## 44 22 99 87
添加向量元素
向向量添加元素可以使用append()
函数。参数包括:
vec
指目标向量,即要把元素添加到的向量。
value
指目标元素,即想要添加的元素。如果是单个元素,直接写赋值,如果是多个元素,需要使用c()
函数。
index
是可选参数,即要把新添加的元素插入到原先向量中哪个索引位置的后面,默认是插入到原有向量末尾。
注意:需要重新赋值变量才能将新生成的向量保存。
new_score <- c(55, 89)
# 未给定插入位置
english_score_new <- append(english_score, new_score)
english_score_new
## A B C D E F
## 85 70 42 95 39 67 55 89
# 给定插入位置
english_score_new2 <- append(english_score, new_score, 2)
english_score_new2
## A B C D E F
## 85 70 55 89 42 95 39 67
移除向量元素
从向量移除元素可以使用 -
号。
# 从english_score_new向量移除第2个索引的元素
english_score_new[-2]
## A C D E F
## 85 42 95 39 67 55 89
#从english_score_new向量移除第2至第4个索引的元素
english_score_new[-c(2:4)]
## A E F
## 85 39 67 55 89
#从english_score_new向量移除第2、5、7个索引的元素
english_score_new[-c(2,5,7)]
## A C D F
## 85 42 95 67 89
按逻辑进行向量选择
R中的逻辑运算符:
< |
小于 |
> |
大于 |
<= |
小于等于 |
>= |
大于等于 |
== |
等于 |
!= |
不等于 |
%in% |
包含 |
& |
和 |
| |
或 |
# 创建bmi向量
bmi <- c(26.5, 22.4, NA, 25.5, 31, 27, 20, NA, 19.4, 23, 30)
# 筛选BMI<24的元素
bmi[bmi<24]
## [1] 22.4 NA 20.0 NA 19.4 23.0
# 筛选BMI>28的元素
bmi[bmi>28]
## [1] NA 31 NA 30
# 筛选BMI<=20或者>=30的元素
bmi[(bmi<=20)|(bmi>=30)]
## [1] NA 31.0 20.0 NA 19.4 30.0
# 筛选BMI在向量(26,27,28,29,30)内的元素
bmi[bmi %in% c(26:30)]
## [1] 27 30
# 筛选BMI在[24,30]范围内的元素
bmi[(bmi>=24)&(bmi<=30)]
## [1] 26.5 NA 25.5 27.0 NA 30.0
向量的极值
我们可以使用max()
和min()
函数分别获得向量的最大与最小值。
我们还可以使用which.max()
和which.min()
函数分别获得向量的最大与最小值对应的索引值。
# max()函数默认不会排除NA
max(bmi)
## [1] NA
## [1] 31
# 返回最大值的索引值,这里的索引值是包含缺失值在内的索引值
which.max(bmi)
## [1] 5
which(bmi == max(bmi, na.rm=TRUE))
## [1] 5