第三天 R语言对象:向量和矩阵及其操作 R语言主要分析的对象是数据集,R语言数据集主要是向量、矩阵、数据框、列表、数组等,我们主要介绍前4种。本文先介绍向量和矩阵。 一、向量(一维数据) 向量是R语言中最基本的数据对象类型,它可以是数值型、字符型、逻辑值型、复数型。注意:同一向量不能混杂多种不同类型的数据。 在医学数据分析中,向量相当于一个变量,向量名为变量名,向量值为变量值。 1. 创建向量 通过函数c( )实现向量创建功能,例如 x1<-c(2,3,5,7,10) x1 [1] 2 3 5 7 10 >x2<-c("a","b","c") >x2 [1] "a" "b" "c" 2. 向量索引(子集提取) 向量子集索引一般采用中括号[ ],根据元素所在的位置或者名称提取元素。向量子集的提取常见方法包括位置的提取、根据值大小提取、名称的提取、采用subset( )函数提取。 第一种方法:位置提取法 (1)下标索引(注意:R中下标是从1开始的),例如 x1[1] #返回x1的第1个元素 x1[-1] #返回除第一个元素之外的所有元素 x1[c(2:4)] #返回x1的第2至4个元素 x1[-c(2:4)] #返回x1的除第2至4元素之外的所有元素 (2) which元素位置 通过函数which( )返回逻辑向量中为TRUE的位置; which.max(x1)返回向量x1中最大值所在的位置; which.min(x1)返回向量x1中最小值所在的位置。 > x1<-c(2,3,5,7,10) > x1[which(x1>3 & x1<8)] [1] 5 7 > x1[which.max(x1)] ten 10 第二种方法:根据值大小提取 > x1<-c(2,3,5,7,10) > x1[x1>3 & x1<8] # 产生大于3 又小于8的子集 [1] 5 7 第三种方法:根据名称索引 先给向量中的每个元素命名,再通过名称访问对应的元素: > names(x1)<-c("two","three","five","seven","ten") > x1[c("three","seven")] three seven 3 7 第四种方法:subset生成子集 检索向量中满足条件的元素,提取出来: > subset(x1,x1>3 & x1<8) five seven 5 7 3. 向量的编辑 对已创建向量进行增加或删除元素。 (1)增加元素 >x<-1:5 >x [1] 1 2 3 4 5 >x<-c(x, c(6,7,8)) # 在x后面增加6、7、8 >x [1] 1 2 3 4 5 6 7 8 >x[10]=10 # 增加一个元素,第十个位置为10,第九个为缺失,缺失值用NA表示 >x [1] 1 2 3 4 5 6 7 8 NA 10 (2)删除元素 >x=1:8 >x [1] 1 2 3 4 5 6 7 8 >x<-x[-c(3,5)] # 加负号,是反向删除,这是最常见的方式 >x [1] 1 2 4 6 7 8 >x<-x[-1] # 删去第一个元素 >x [1] 2 4 6 7 8 4.向量排序 函数sort(),基本格式: sort(x,decreasing=FALSE, na.last= FALSE,...) 其中,x为排序对象(数值型或字符型);decreasing默认为FALSE即升序,TURE为降序;na.last默认为FALSE,若为TRUE,则将向量中的NA值放到序列末尾。 函数rank( ),返回值是该向量中对应元素的“排名”。 函数order(),返回值是对应“排名”的元素所在向量中的位置,例如, >x<-c(1,5,8,2,9,7,4) >x [1] 1 5 8 2 9 7 4 >order(x) [1] 1 4 7 2 6 3 5 说明:默认按升序,排名第2的元素在原向量的第4个位置。 函数rev( ),将序列进行反转,即1,2,3变成3,2,1 5.向量的基本运算 向量基本运算函数也比较多,以下陈列部分: length(x1) #向量的长度 [1] 5 > mean(x1) #计算向量均数 [1] 5.4 > sd(x1) #计算向量的均数 [1] 3.209361 > sum(x1) #计算向量的总计 [1] 27 > median(x1) #计算向量的中位数 [1] 5 二、矩阵(二维数据) 矩阵是二维数组,可以描述二维数据。它要求矩阵内各元素有相同的类型,都是数值型,或者字符串型。在医学数据分析中,一般情况下数据集不太会是矩阵,矩阵一般会出现数据分析结果中。 1.创建矩阵 矩阵一般在向量的基础上产生,常用的函数为matrix()和dim( ) 函数matrix(),基本格式为: matrix(x, nrow=..., ncol=..., byrow=..., dimnames=...) 其中,x为数据向量作为矩阵的元素;nrow设定行数;ncol设定列数;byrow设置是否按行填充,默认为FALSE(按列填充);dimnames用字符型向量表示矩阵的行名和列名。 >x<-1:6 >x [1] 1 2 3 4 5 6 >a<-matrix(x,nrow=3,ncol=2) #采用matrix产生3行2列矩阵 >a [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 > b<-matrix(x,nrow=3,ncol=2,byrow=F, dimnames=list(c("r1","r2","r3"), c("c1","c2"))) > b c1 c2 r1 1 4 r2 2 5 r3 3 6 函数dim(),主要方式是将向量设定为2维,具有规定行列数的矩阵: >dim(x)=c(3,2) # 设为3行2列的矩阵 >x [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 2.矩阵索引(子集提取) 矩阵子集的提取和向量类似,主要以中括号[ ]方法提取,由于它是二维数据,可以通过[ , ]分别提取行和列。主要的提取方式包括位置提取、名称提取和值大小的提取 位置提取 a[i,j] #返回矩阵a的第i行,第j列的元素 a[i,] #返回矩阵a的第i行 a[,j] #返回矩阵a的第j列 a[c(i:j),] #返回矩阵a的第i至第j行 a[i,j] #返回矩阵a的第i行,第j列的元素 按名称索引: b["r2","c1"] #返回矩阵c的第r2行,第c1列的元素2 按值大小提取 b[,r2=2] # 返回“r2”一行值为2的一列 b[,r2=2] # 返回“r2”一行值为2的一列 3.矩阵的编辑 数据库合并 函数rbind(A,B), 纵向合并(增加行),要求列数相同; 函数cbind(C,D), 衡向合并(增加列),要求行数相同。 注意:rbind(A,1) 相当于给矩阵A增加一行“1”。 > rbind(a,b) c1 c2 1 4 2 5 3 6 r1 1 4 r2 2 5 r3 3 6 > cbind(a,b) c1 c2 r1 1 4 1 4 r2 2 5 2 5 r3 3 6 3 6 数据库删减 a[-1,],删除矩阵a的第一行 a[,-1],删除矩阵a的第一列 a[-c(2:4),],删除矩阵a的第2至4行 4.矩阵的运算 +-*/——四则运算(要求矩阵维数相同) colSums() #对矩阵的各列求和 rowSums() #对矩阵的各行求和 colMeans() #对矩阵的各列求均值 rowMeans() #对矩阵的各行求均值 t() #对矩阵转置 %*% #矩阵乘法(要求左阵的列数=右阵的行数) diag() #取矩阵对角线元素生成对角矩阵,若对象是向量,则以该向量作为对角元素 solve() #返回逆矩阵(要求矩阵可逆) eigen() #返回矩阵的特征值与特征向量 DAY3的内容就介绍到这里! |
|