昵称7300976 / 语言 / 30天学会R语言 DAY3: R语言对象(1):向量...

分享

   

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

2019-10-03  昵称73009...

第三天  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的内容就介绍到这里!

最后,一个月就能学会R语言,你敢挑战一下吗?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>