在R语言中,向量(Vector)是最基础、最核心的数据结构。R语言中的几乎所有标量(单个数字或字符)在底层都是作为长度为1的向量存在的。理解向量的运作机制,是精通R语言的关键。
以下是R语言向量语法的详细教程大全。
一、 向量的创建 (Creating Vectors)
在R中,向量是一维的,并且只能包含同一种基本数据类型。
1. 使用c()函数拼接
c()是 concatenate(连接)的缩写,是最常用的创建向量的方法。
# 创建数值型向量v_num<-c(1,2.5,4.8,10)# 创建字符型向量v_chr<-c("Apple","Banana","Cherry")# 创建逻辑型向量v_logi<-c(TRUE,FALSE,TRUE,TRUE)2. 使用:生成连续整数序列
v_seq1<-1:10# 包含 1 到 10 的整数v_seq2<-10:1# 递减序列:10, 9, 8... 1v_seq3<-2.5:8.5# 生成 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.53. 使用seq()函数生成等差数列
seq()提供了比:更高的自由度。
# seq(from, to, by) - by表示步长seq(1,10,by=2)# 返回: 1 3 5 7 9# seq(from, to, length.out) - 指定生成的元素总个数seq(0,1,length.out=5)# 返回: 0.00 0.25 0.50 0.75 1.004. 使用rep()函数生成重复序列
# rep(x, times) - 整体重复rep(c(1,2),times=3)# 返回: 1 2 1 2 1 2# rep(x, each) - 逐个元素重复rep(c(1,2),each=3)# 返回: 1 1 1 2 2 2# 结合使用rep(c("A","B"),each=2,times=2)# 返回: "A" "A" "B" "B" "A" "A" "B" "B"二、 向量的数据类型与强制转换
向量要求所有元素类型一致。如果用c()拼接不同类型的元素,R会自动进行隐式强制类型转换(Coercion)。
1. 隐式转换规则
转换优先级(从低到高,低优先级会被转换为高优先级):
逻辑型 (Logical) -> 整型 (Integer) -> 数值型 (Numeric) -> 字符型 (Character)
c(TRUE,10)# TRUE 被转为 1,结果为数值型向量: 1 10c(3.14,"R")# 3.14 被转为字符,结果为字符型向量: "3.14" "R"c(FALSE,2L,"A")# 全部转为字符型: "FALSE" "2" "A"2. 显式类型转换
你可以使用as.*()族函数强制改变向量的类型。
x<-c("12.5","8","99")as.numeric(x)# 转为数值: 12.5 8.0 99.0y<-c(0,1,-5)as.logical(y)# 0转为FALSE,所有非0值转为TRUE: FALSE TRUE TRUE三、 为向量元素命名
你可以为向量的每一个元素指定一个名称,这在数据提取时非常有用。
# 方法1:创建时直接命名scores<-c(Math=90,English=85,History=88)# 方法2:使用 names() 函数后期命名ages<-c(25,30,22)names(ages)<-c("Alice","Bob","Charlie")# 查看向量的名称names(scores)# 返回: "Math" "English" "History"# 清除命名names(ages)<-NULL四、 向量的索引与提取 (Subsetting)
注意:R语言的索引是从 1 开始的,不是 0。使用方括号[]进行索引提取。
1. 正整数索引(提取)
v<-c(10,20,30,40,50)v[1]# 提取第1个元素: 10v[c(1,3,5)]# 提取第1, 3, 5个元素: 10 30 50v[2:4]# 提取第2到第4个元素: 20 30 402. 负整数索引(剔除)
v[-1]# 提取除了第1个元素之外的所有元素: 20 30 40 50v[c(-1,-5)]# 剔除第1和第5个元素: 20 30 40# 注意:不能在同一个中括号里混用正整数和负整数(例如 v[c(1, -2)] 会报错)。3. 名称索引
如果向量有名称,可以直接按名称提取。
scores<-c(Math=90,English=85,History=88)scores["English"]# 返回 85scores[c("Math","History")]# 返回 90 884. 逻辑向量索引(极其重要)
根据条件筛选元素是R语言数据清洗的核心技巧。
v<-c(15,8,22,5,30)# 返回一个逻辑向量: TRUE FALSE TRUE FALSE TRUEv>10# 将逻辑向量放入中括号,R会提取对应位置为 TRUE 的元素v[v>10]# 筛选出大于10的元素: 15 22 30# 复合条件 (与 &,或 |)v[v>10&v<25]# 筛选出大于10且小于25的元素: 15 22五、 向量化运算与循环补齐 (Recycling Rule)
R语言针对向量运算进行了深度优化,你不需要写for循环就可以对所有元素进行计算。
1. 向量与标量的运算
v<-c(1,2,3,4)v*10# 每一个元素都乘以10: 10 20 30 40v+5# 每一个元素都加5: 6 7 8 92. 向量与向量的运算(长度相同)
v1<-c(1,2,3)v2<-c(10,20,30)v1+v2# 对应位置元素相加: 11 22 333. 循环补齐规则 (Recycling)
当两个不同长度的向量进行运算时,较短的向量会被重复使用(循环),直到与较长的向量长度一致。
v_long<-c(1,2,3,4,5,6)v_short<-c(10,100)v_long+v_short# v_short 会被隐式补齐为: c(10, 100, 10, 100, 10, 100)# 结果为: 11 102 13 104 15 106注:如果长向量的长度不是短向量长度的整数倍,R会执行运算,但会弹出一个警告信息 (Warning message)。
六、 常用向量操作函数族
1. 基础信息查询
length(v):返回向量的长度(元素个数)。class(v):返回向量的数据类型。typeof(v):返回更底层的类型(如把 numeric 分为 double 和 integer)。
2. 统计与数学计算
sum(v):求和。mean(v):求平均值。max(v),min(v):求最大、最小值。sd(v),var(v):求标准差、方差。summary(v):提供最小值、四分位数、均值、最大值的综合统计摘要。
3. 排序与顺序
sort(v):对向量的值进行排序(默认升序,降序用sort(v, decreasing = TRUE))。order(v):返回向量排序后的索引值(非常常用于数据框按某列排序)。rev(v):将向量元素首尾反转。
4. 元素查找与去重
unique(v):去除重复元素,返回唯一值。table(v):进行频数统计,返回每个不同元素出现的次数。which(v > 10):返回满足条件的元素的索引位置,而不是元素本身。match(v1, v2)或%in%:查找v1中的元素是否在v2中。
c("A","C")%in%c("A","B","C","D")# 返回: TRUE TRUE七、 向量中的缺失值 (NA) 处理
在实际数据中,经常会遇到缺失值。在R中,缺失值用NA(Not Available) 表示。
1. 识别缺失值
绝对不能用v == NA来判断缺失值,因为缺失值和任何值比较的结果依然是缺失值(NA)。必须使用is.na()函数。
v<-c(1,2,NA,4,5)is.na(v)# 返回: FALSE FALSE TRUE FALSE FALSEv[!is.na(v)]# 提取所有非缺失值元素: 1 2 4 5 (这里用到了 ! 逻辑取反)2. 计算时的na.rm参数
大多数统计函数如果遇到向量包含NA,默认会直接返回NA。为了跳过缺失值进行计算,需要添加参数na.rm = TRUE。
v<-c(10,20,NA,30)sum(v)# 返回: NAsum(v,na.rm=TRUE)# 忽略NA,返回: 60