概念
数据结构是计算机存储、组织数据的方式
数据结构是指相互之间存在一种或多种特定关系的数据元素集合
R中常见的数据结构
向量矩阵数据框:经常使用的一种数据结构列表因子R中常见的数据结构
数值型:数值可以用于直接结算,加减乘除字符串型:可以进行连接,转换,提取等逻辑型:真或者假日期型向量概述
向量是R语言中最基本的数据结构,向量必须由类型相同的元素组成
使用赋值符号“<-”和组合函数c(),可以创建各种类型的向量
> x<-c(1,2,3,4,5) > x [1] 1 2 3 4 5 > y <- c("one","two","there") > y [1] "one" "two" "there" > z <- c(TRUE,FALSE,T,F) > z [1] TRUE FALSE TRUE FALSE建立特殊的向量
> c(1:10) [1] 1 2 3 4 5 6 7 8 9 10 > seq(from=1,to=10) [1] 1 2 3 4 5 6 7 8 9 10 # from为起始值,to为终止值,by控制步幅 > seq(from=1,to=10,by=2) [1] 1 3 5 7 9 # length.out控制个数 > seq(from=1,to=10,length.out = 3) [1] 1.0 5.5 10.0 > seq(from=1,to=10,length.out = 3) [1] 1.0 5.5 10.0 > rep(2,5) [1] 2 2 2 2 2 # 一共重复5次 > rep(c(1,2,3),5) [1] 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 # 每个重复5次 > rep(c(1,2,3),each=5) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 # 每个重复3次,且总体重复2次 > rep(c(1,2,3),each=3,times=2) [1] 1 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 3访问向量
通过数字索引进行访问 > x <- c(1:10) > x [1] 1 2 3 4 5 6 7 8 9 10 # R语言中的索引位置从1开始 > x[1] [1] 1 # 可以一次用向量索引多个元素 > x[c(1,3,5)] [1] 1 3 5 # 索引负元素指显示除负元素以外的所有元素 > x[-4] [1] 1 2 3 5 6 7 8 9 10 通过表达式进行访问 > x <- c(1:10) # 输出大于4的数 > x[x>4] [1] 5 6 7 8 9 10 # 输出大于4小于8的数 > x[x>4 & x<8] [1] 5 6 7 # 判断1是否在x中 > 1 %in% x [1] TRUE # 将x中的数据定义为TRUE,并输出为TRUE的元素 > x[1 %in% x] [1] 1 2 3 4 5 6 7 8 9 10 通过索引名进行访问 > x <- c(1:10) > names(x) <- c("一","二","三","四","五","六","七","八","九","十") > x["三"] 三 3 > x 一 二 三 四 五 六 七 八 九 十 1 2 3 4 5 6 7 8 9 10向量运算
向量与数值的加减乘除
> x <- 1:10 # 对向量的运算都是对所有元素的操作 > x + 2 [1] 3 4 5 6 7 8 9 10 11 12 > x - 3 [1] -2 -1 0 1 2 3 4 5 6 7 > x <- x + 1 > x [1] 2 3 4 5 6 7 8 9 10 11 # **是幂次运算 > x ** 2 [1] 4 9 16 25 36 49 64 81 100 121 # %%是求余数 > x %% 2 [1] 0 1 0 1 0 1 0 1 0 1 # %/%是整除运算 > x %/% 2 [1] 1 1 2 2 3 3 4 4 5 5向量与向量的加减乘除
> x <- 1:10 > y <- seq(1,100,length.out = 10) > x + y [1] 2 14 26 38 50 62 74 86 98 110 > x * y [1] 1 24 69 136 225 336 469 624 801 1000 > x ** y [1] 1.000000e+00 4.096000e+03 9.414318e+10 [4] 2.951479e+20 2.842171e+31 3.771117e+43 [7] 4.183778e+56 2.760699e+70 8.464150e+84 [10] 1.000000e+100 > x %% y [1] 0 2 3 4 5 6 7 8 9 10 > x %/% y [1] 1 0 0 0 0 0 0 0 0 0 #向量运算长的必须是短的元素的整数倍,可以进行循环数学函数
abs:返回每个向量的绝对值sqrt:计算平方根log、log10:计算对数exp:计算指数ceiling:返回不小于向量的最小整数floor:返回不大于向量的最大整数trunc:返回整数部分round:进行四舍五入统计函数
sum:向量所有元素之和max:向量元素最大值min:向量元素最小值range:向量元素最大和最小值mean:向量均值var:向量方差sd:向量标准差prod:向量连乘积median:向量中位数quantile:向量分位数which.min:最大值的索引值,还可以与其它统计函数结合矩阵的创建
矩阵的创建使用函数matrix(),元素数要超过行数与列数的乘积,可以只指定行数或列数
默认情况下按照列排序,可使用关键字byrow改为按行排序
> x <- matrix(1:20,nrow = 4,ncol = 5,byrow = T) > x [,1] [,2] [,3] [,4] [,5] [1,] 1 2 3 4 5 [2,] 6 7 8 9 10 [3,] 11 12 13 14 15 [4,] 16 17 18 19 20给矩阵的行与列命名
可以通过dimnames()函数给矩阵的行或列命名,命名后可以根据名字进行索引
还可以通过dim()函数创建矩阵
# 方式一:dimnames() > x <- matrix(1:20,nrow = 4,ncol = 5,byrow = T) > rnames <- c("R1","R2","R3","R4") > cnames <- c("C1","C2","C3","C4","C5") > dimnames(x) <- list(rnames,cnames) > x C1 C2 C3 C4 C5 R1 1 5 9 13 17 R2 2 6 10 14 18 R3 3 7 11 15 19 R4 4 8 12 16 20 # 方式二:dim() > dim(x) <- c(4,5) > x [,1] [,2] [,3] [,4] [,5] [1,] 1 5 9 13 17 [2,] 2 6 10 14 18 [3,] 3 7 11 15 19 [4,] 4 8 12 16 20数组的创建
创建数组有两种方式:一是通过函数dim()创建
二是通过array()函数创建,同时可以指定索引名
# 方式一:dim() > x <- 1:8 > dim(x) <- c(2,2,2) > x , , 1 [,1] [,2] [1,] 1 3 [2,] 2 4 , , 2 [,1] [,2] [1,] 5 7 [2,] 6 8 # 方式二:array() > dim1 <- c("A1","A2") > dim2 <- c("B1","B2") > dim3 <- c("C1","C2") > z <- array(1:8,c(2,2,2),dimnames = list(dim1,dim2,dim3)) > z , , C1 B1 B2 A1 1 3 A2 2 4 , , C2 B1 B2 A1 5 7 A2 6 8列表顾名思义就是用来存储很多内容的一个集合,在其他编程语言中,列表一般和数组是等同的,但是在R语言中,列表却是R中最复杂的一种数据结构,也是非常重要的一种数据结构。
列表就是一些对象的有序集合。列表中可以存储若干向量、矩阵、数据框,甚至其他列表的组合。
列表的创建
创建一个列表使用函数list(),将列表元素添加其中,并且可以为列表元素命名
> a <- 1:10 > b <- "hello world" > c <- matrix(1:12,nrow = 3,ncol = 4) > mlist <- list(a,b,c) > mlist [[1]] [1] 1 2 3 4 5 6 7 8 9 10 [[2]] [1] "hello world" [[3]] [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12 > mlist <- list(first=a,second=b,third=c) > mlist $first [1] 1 2 3 4 5 6 7 8 9 10 $second [1] "hello world" $third [,1] [,2] [,3] [,4] [1,] 1 4 7 10 [2,] 2 5 8 11 [3,] 3 6 9 12列表的索引
# 通过数值进行索引 > mlist[1] $first [1] 1 2 3 4 5 6 7 8 9 10 # 可以一次索引多个向量 > mlist[c(1,2)] $first [1] 1 2 3 4 5 6 7 8 9 10 $second [1] "hello world" # 可以通过名称进行索引 > mlist["first"] $first [1] 1 2 3 4 5 6 7 8 9 10 # 使用两个中括号进行索引时,代表是被索引元素的数据类型,而不是列表类型 > mlist[[1]] [1] 1 2 3 4 5 6 7 8 9 10数据框是R语言中应用最广泛的数据结构
利用数据框,可以容纳不同类型的数据,而不必使用同一类型的数据
数据框的每一列的数据类型必须相同,但不同的列可以存储不同的类型的数据
数据框的创建
> a <- c("北京","上海","广州") > b <- c("100平","125平","126平") > c <- c("100万","150万","200万") # 使用data.frame将已经建立好的向量作为参数传入其中 > d <- data.frame(a,b,c) > d a b c 1 北京 100平 100万 2 上海 125平 150万 3 广州 126平 200万数据框的访问
> d[1] a 1 北京 2 上海 3 广州 > d[c(1,3)] a c 1 北京 100万 2 上海 150万 3 广州 200万因子是R语言中非常重要的的对象,或者说向量对象
因子主要用于管理离散的分类变量,比如成绩评定等级(A、B、C),颜色的分类(红、黄、蓝)
因子对象就是管理这些类别变量的重要工具
因子的创建
> grade <- c("A","B","B","A","C") > gradef <- factor(grade) # levels是因子的一个重要属性,揭示了因子中的类别 > gradef [1] A B B A C Levels: A B C