数据结构包含向量、矩阵、数组、列表、数据框(其中,在实际生活中数据框最常用,矩阵是特殊的数组,即二维数组)以下是对向量部分的介绍
一、基本操作
1.向量是用于存储数值型、字符型或逻辑型等数据的一维数组。执行组合功能的函数c()可用来创建向量。
2.每一个向量中的元素须为相同类型(数值型、字符型或逻辑型)
3.向量类型强制规则指的是当向量中的元素类型不一致时,R会尝试将这些元素转换为统一的类型。(优先级:字符型>字符型>数值型)
4.向量元素的索引(R语言的数据结构的下标是从1开始的)
5.向量可以实现相加,得一个新的向量(两个向量的元素可以不一样多,但会失去数学意义,出现警告)
> x_1 <- c(1,2,3,4,5)
> x_1
[1] 1 2 3 4 5
> x_2 <- c(1:6)
> x_2
[1] 1 2 3 4 5 6
> x_3 <- c('今','天','星','期','一','!')
> x_3
[1] "今" "天" "星" "期" "一" "!"
> x_4 <- c('明天',1,2,3)
> x_4
[1] "明天" "1" "2" "3"
> mode(x_4)
[1] "character"
> x_5 <- c(1,'明天',2,3)
> x_5
[1] "1" "明天" "2" "3"
> mode(x_5)
[1] "character"
> x_5[2]
[1] "明天"
> x_1 + x_2
[1] 2 4 6 8 10 7
警告信息:
In x_1 + x_2 : 长的对象长度不是短的对象长度的整倍数
二、向量常用函数
1.length( )测向量长度(返回向量中元素个数)
> length(x_1)
[1] 5
2.运算函数
> x_6 <- c(1,5,9,10)
> sqrt(x_6)# 开方
[1] 1.000000 2.236068 3.000000 3.162278
> sum(x_6)# 求和
[1] 25
> mean(x_6)# 求平均值
[1] 6.25
> var(x_6)# 方差
[1] 16.91667
> sd(x_6)# 标准差
[1] 4.112988
> min(x_6)# 最小值
[1] 1
> max(x_6)# 最大值
[1] 10
> range(x_6)# 取值范围(二维向量,最大值和最小值)
[1] 1 10
3.可以生成向量的函数
> seq(2, 10, 2)# 生成[m,n]指定等差的等差数列(1)
[1] 2 4 6 8 10
> seq(1, 2.5, length.out=3)# 生成[m,n]指定元素个数的等差数列(2)
[1] 1.00 1.75 2.50
>
> rep(1:4,times=2)# 重复1~4两次
[1] 1 2 3 4 1 2 3 4
> rep(1:4,each=2)# 一个一个重复两遍1~4
[1] 1 1 2 2 3 3 4 4
> rep(1:4,c(0,2,0,2)) # 向量中元素分别对应1~4重复次数
[1] 2 2 4 4
> rep(1:4,each=2,len=4)# 一个一个重复两遍1~4,长度为4(输出四个元素)
[1] 1 1 2 2
> rep(1:4,each=2,times=3)# 一个一个重复两遍1~4,重复三次
[1] 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4 1 1 2 2 3 3 4 4
4.筛选函数
> #subset() 函数(优点:自动过滤NA值)
> subset(x_6,x_6>5) #返回元素值
[1] 9 10
> which(x_6>5) # 返回逻辑向量中为TRUE的索引下标
[1] 3 4
> which.min(x_6) #返回向量中元素最大值的索引下标
[1] 1
> which.max(x_6) #返回向量中元素的最小值的索引下标
[1] 4
三、向量索引(用方括号[ ]来实现)
> #!!!混合使用正负值是不允许的
> x_7 <- seq(2, 10, 2)
> x_7
[1] 2 4 6 8 10
> x_7[1] #输出第1个元素(索引下标为1)
[1] 2
> x_7[-1] #输出除了第1个元素以外的值
[1] 4 6 8 10
> x_7[2:4] #输出第2~4个元素
[1] 4 6 8
> x_7[-(2:4)] #输出第2~4个元素以外的值
[1] 2 10
> x_7[c(1,4,2,2)] #输出第1,4,2,2个元素
[1] 2 8 4 4
> x_7["name"] #输出名为"name"的元素
[1] NA
> x_7[x_7 > 3] #输出所有大于3的元素
[1] 4 6 8 10
> x_7[x_7>=3 & x_7<=6] #输出元素值在区间[3,6]的元素
[1] 4 6
四、向量排序
> x_8 <- c(1, 3, 5, 2, 4, 6)
> x_8
[1] 1 3 5 2 4 6
> sort(x_8) #输出升序
[1] 1 2 3 4 5 6
> rev(x_8) #输出降序(1)
[1] 6 4 2 5 3 1
> sort(x_8,decreasing=TRUE) #输出降序(2)
[1] 6 5 4 3 2 1
> order(x_8) #输出升序后对应元素的索引
[1] 1 4 2 5 3 6
> x_8[order(x_8)]
[1] 1 2 3 4 5 6
五、向量的编辑
> x_9 <- c(1:5)
> x_9 <- c(x_9, c(6:10))# 向量扩展
> x_9
[1] 1 2 3 4 5 6 7 8 9 10
> x_9 <- x_9[-10]# 删除第10个元素
> x_9
[1] 1 2 3 4 5 6 7 8 9
> x_9 <- x_9[c(-5:-3)]# 删除区间[3,5]的元素
> x_9
[1] 1 2 6 7 8 9
> x_9 <- x_9[c(3:5)]# 删除除了区间[3,5]以外的元素
> x_9
[1] 6 7 8