首页 > 科研教程 > 30天学会R语言 DAY3: R语言对象(1):向量和矩阵及其操作
2022
06-04

30天学会R语言 DAY3: R语言对象(1):向量和矩阵及其操作

a907419167e41fff21613184026db5ee.jpegR语言主要分析的对象是数据集,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的内容就介绍到这里!


转自:医学论文与统计分析

最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情