R语言基础数据结构

R语言常用的数据结构共有六种,包括向量(Vector)、矩阵(Matrix)、数组(Array)、因子(Factor)、数据框(Data.Frame)、列表(List)。

目录

R语言基础结构

一、数据结构

1、向量(Vector)

(1)向量(Vector)自创建的三种方式

(2)向量(Vector)的索引和取值

(3)向量(Vector)使用逻辑判断取值

(4)向量(Vector)常用函数

2、因子(Factor)

(1)因子(Factor)的创建

(2)因子(Factor)数据类型转换

3、矩阵(Matrix)

(1)矩阵(Matrix)的创建与生成

(2)矩阵(Matrix)的维度及行列名

(3)提取矩阵(Matrix)的信息

(4)矩阵(Matrix)的常用计算及函数

4、数据框(Data.Frame)

(1)数据框的创建与生成

(2)基本函数

(3)数据提取:同矩阵,并增加$

5、数组(Array)

6、列表(List)

二、数据结构判断


一、数据结构

1、向量(Vector)

向量是用于存储数值型(Numeric)、字符型(character)或逻辑型(logical)数据的一维数组。执行组合功能的函数c()可用来创建向量。注意,单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型),当单个向量中拥有不同的类型的数据时,如同时存在数值型和字符型数据时,会转换成字符型向量。

(1)向量(Vector)自创建的三种方式

#1.直接创建
> c(1,2,3,4,5)
[1] 1 2 3 4 5
#2.运用冒号
> 1:10
 [1]  1  2  3  4  5  6  7  8  9 10
#3.使用seq函数创建
> seq(from=1,to=10,by=2)
[1] 1 3 5 7 9

(2)向量(Vector)的索引和取值

> a=1:10
> a[c(1,2,3)]
[1] 1 2 3
> a[1]#R语言索引从1开始,python索引从0开始
[1] 1
> a[-1]#负号代表剔除
[1]  2  3  4  5  6  7  8  9 10

(3)向量(Vector)使用逻辑判断取值

> a=1:10
> a<5
 [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE
 [9] FALSE FALSE
> a[a<5]
[1] 1 2 3 4

(4)向量(Vector)常用函数

#1.循环补齐
> c(1,2,3,4)+c(1,2)
[1] 2 4 4 6
> c(1,2,3,4)-c(1,2)
[1] 0 0 2 2
> c(1,2,3,4)*c(1,2)
[1] 1 4 3 8
#2.mean()函数等
> a=1:10
> mean(a)
[1] 5.5
> sum(a)
[1] 55
> a=c(1,3,7,2,6,2)
> which(a>5)#返回值为位置信息
[1] 3 5
> a[which(a>5)]
[1] 7 6
#3.sort()函数,rank()函数
> a=c(1,3,7,2,6,2)
> sort(a)#默认为升序
[1] 1 2 2 3 6 7
> sort(a,decreasing = T)
[1] 7 6 3 2 2 1
> rank(a)#对向量从小到大进行排序,并得到排序后的序号
[1] 1.0 4.0 6.0 2.5 5.0 2.5
#4.grep()函数,抓取在元素中想要获得的对象,并返回位置
> gene=c("TP11","TP14","MDM5")
> grep("TP",gene)
[1] 1 2
#5.length()函数,获得向量的长度
> a=c(1,3,7,2,6,2)
> length(a)
[1] 6
#6.subset()函数
#基本用法:subset(data,筛选的条件)
> a=c(1,3,7,2,6,2)
> subset(a,a>4)
[1] 7 6
#rep()函数,重复向量
> a=c(1,3,7,2,6,2)
> rep(a,2)
 [1] 1 3 7 2 6 2 1 3 7 2 6 2
> rep(a,each=2)
 [1] 1 1 3 3 7 7 2 2 6 6 2 2

2、因子(Factor)

在R中名义型变量和有序性变量称为因子,factor。这些分类变量的可能值称为应该水平level,例如good,better,best,都称为一个level;由这些水平之构成的向量称为因子

(1)因子(Factor)的创建

factor(x,ordered,levels)
x:定义的因子
ordered:是否进行排序
levels:排序的顺序,如果未定义顺序,则按照首字母先后顺序排列

(2)因子(Factor)数据类型转换

数值可以直接转换成因子,但因子不能直接转换为数值,需要,转换成字符串或向量后,再转换成数值。

> a<-factor(round(rnorm(5),2))
> a
[1] -0.74 -1.44 -1.19 1.49  -0.28
Levels: -1.44 -1.19 -0.74 -0.28 1.49
> as.numeric(a)
[1] 3 1 2 5 4
> as.numeric(as.character(a))
[1] -0.74 -1.44 -1.19  1.49 -0.28
> as.numeric(as.vector(a))
[1] -0.74 -1.44 -1.19  1.49 -0.28

3、矩阵(Matrix)

矩阵(Matrix)是最常见的二维数据结构之一,二维分别代表行和列

矩阵中每一列的数据是相同的,通常时数值型,偶尔也会用到全是字符串的字符型矩阵

当矩阵中同时存在数值型和字符型数据时,会转换成字符型矩阵

(1)矩阵(Matrix)的创建与生成

#1.通过matrix()函数生成
> data<-rnorm(15)
> data
 [1]  0.82162953  1.02864783 -0.27540747  0.49663266
 [5] -1.63685433 -0.35058725  0.01179141  0.40300628
 [9] -1.15968084  1.98627585 -0.39469700  0.23812107
[13]  0.45055860 -0.58775678  0.86372135
> matrix(data,nrow=5)
           [,1]        [,2]       [,3]
[1,]  0.8216295 -0.35058725 -0.3946970
[2,]  1.0286478  0.01179141  0.2381211
[3,] -0.2754075  0.40300628  0.4505586
[4,]  0.4966327 -1.15968084 -0.5877568
[5,] -1.6368543  1.98627585  0.8637213
> matrix(data,nrow=5,byrow = T)
           [,1]       [,2]       [,3]
[1,] 0.82162953  1.0286478 -0.2754075
[2,] 0.49663266 -1.6368543 -0.3505872
[3,] 0.01179141  0.4030063 -1.1596808
[4,] 1.98627585 -0.3946970  0.2381211
[5,] 0.45055860 -0.5877568  0.8637213
#2.使用rbind()或者cbind()函数合并
> col1<-c(1,2,3)
> col2<-c(3,4,5)
> col3<-c(6,7,8)
> rbind(col1,col2,col3)#逐行合并
     [,1] [,2] [,3]
col1    1    2    3
col2    3    4    5
col3    6    7    8
> cbind(col1,col2,col3)#逐列合并
     col1 col2 col3
[1,]    1    3    6
[2,]    2    4    7
[3,]    3    5    8
#3.从文件读入或使用as.matrix()函数转化

(2)矩阵(Matrix)的维度及行列名

> data<-matrix(data,nrow=5)
> data
           [,1]      [,2]       [,3]
[1,] -1.1832075 -1.186129 -1.3719325
[2,] -0.6651334 -1.890352  1.8733599
[3,]  1.4455362 -0.453745  0.1370088
[4,] -1.0078466  1.771817  0.7545562
[5,] -0.9555193  2.609297 -1.1188567
> dim(data)#获取矩阵维度
[1] 5 3
> nrow(data)#获取矩阵行数
[1] 5
> ncol(data)#获取矩阵列名
[1] 3
> t(data)#转置矩阵
          [,1]       [,2]       [,3]       [,4]
[1,] -1.183208 -0.6651334  1.4455362 -1.0078466
[2,] -1.186129 -1.8903517 -0.4537450  1.7718170
[3,] -1.371932  1.8733599  0.1370088  0.7545562
           [,5]
[1,] -0.9555193
[2,]  2.6092972
[3,] -1.1188567
#提取矩阵行列名
> rownames(data)
NULL
> colnames(data)
NULL
> dimnames(data)
NULL
#修改矩阵行列名
> rownames(data)<-c("row1","row2","row3","row4","row5")
> colnames(data)<-c("col1","col2","col3")
> rownames(data)
[1] "row1" "row2" "row3" "row4" "row5"
> colnames(data)
[1] "col1" "col2" "col3"
> dimnames(data)
[[1]]
[1] "row1" "row2" "row3" "row4" "row5"

[[2]]
[1] "col1" "col2" "col3"

(3)提取矩阵(Matrix)的信息

#1.基于位置或名称信息提取
> data<-matrix(data,nrow=5)
> rownames(data)<-c("row1","row2","row3","row4","row5")
> colnames(data)<-c("col1","col2","col3")
> data
           col1      col2       col3
row1 -1.1832075 -1.186129 -1.3719325
row2 -0.6651334 -1.890352  1.8733599
row3  1.4455362 -0.453745  0.1370088
row4 -1.0078466  1.771817  0.7545562
row5 -0.9555193  2.609297 -1.1188567
> data["row1","col3"]
[1] -1.371932
> data[1,3]
[1] -1.371932
> data[2,]
      col1       col2       col3 
-0.6651334 -1.8903517  1.8733599 
> data[,2]
     row1      row2      row3      row4      row5 
-1.186129 -1.890352 -0.453745  1.771817  2.609297 
基于逻辑判断提取
> data[col3>0,]

(4)矩阵(Matrix)的常用计算及函数

> data<-matrix(data,nrow=5)
> data
           [,1]      [,2]       [,3]
[1,] -1.1832075 -1.186129 -1.3719325
[2,] -0.6651334 -1.890352  1.8733599
[3,]  1.4455362 -0.453745  0.1370088
[4,] -1.0078466  1.771817  0.7545562
[5,] -0.9555193  2.609297 -1.1188567
> data*3
          [,1]      [,2]       [,3]
[1,] -3.549623 -3.558387 -4.1157974
[2,] -1.995400 -5.671055  5.6200796
[3,]  4.336608 -1.361235  0.4110265
[4,] -3.023540  5.315451  2.2636687
[5,] -2.866558  7.827892 -3.3565702
> rowSums(data)
[1] -3.7412690 -0.6821253  1.1288000  1.5185266
[5]  0.5349211
> colSums(data)
[1] -2.3661708  0.8508885  0.2741357
#apply()函数,
#apply函数主要由三部分构成:数据,行列指向(1表示按行,2表示按列),计算函数
> apply(data,1,mean)
[1] -1.2470897 -0.2273751  0.3762667  0.5061755
[5]  0.1783070
> apply(data,2,function(x)sum(x))
[1] -2.3661708  0.8508885  0.2741357

4、数据框(Data.Frame)

数据框(Data.Frame)每一列内的数据类型是相同的,列之间的数据可以不同

(1)数据框的创建与生成

#1,通过data.frame()函数直接生成
> name=c("xiaoxiao","xiaoha","xiaoxi")
> age=c(1,2,3)
> female=c(1,2,1)
> data<-data.frame(name,age,female)
> data
      name age female
1 xiaoxiao   1      1
2   xiaoha   2      2
3   xiaoxi   3      1
#2,通过函数读取
#3,从矩阵转换
> data<-matrix(rnorm(15),nrow=5)
> class(data)
[1] "matrix" "array" 
> data1<-as.data.frame(data)
> class(data1)
[1] "data.frame"

(2)基本函数

数据框沿用矩阵中的常用函数,如行列名,维度,行列数,apply()函数等均适用。

> data<-matrix(rnorm(50),nrow=10)
> head(data)#查看数据前几行
             [,1]        [,2]       [,3]       [,4]
[1,]  0.927170051  0.11039360  0.1518877 -0.9958674
[2,] -0.308848086  0.23106951  1.2197350 -2.1594594
[3,]  0.004737546  0.19146477 -0.8166223  2.1784072
[4,] -1.240030080  1.57160842  0.7753148  0.5399974
[5,] -2.139280528 -0.06151895  0.8411452 -1.6597603
[6,] -1.306004328  0.32306013 -0.9751941  0.6303062
           [,5]
[1,] -1.6449042
[2,] -0.1726496
[3,]  0.4338241
[4,] -0.4006596
[5,]  0.9250183
[6,] -1.6632007
> tail(data)#查看数据后几行
            [,1]        [,2]       [,3]        [,4]
 [5,] -2.1392805 -0.06151895  0.8411452 -1.65976025
 [6,] -1.3060043  0.32306013 -0.9751941  0.63030623
 [7,] -0.6417111 -0.73045246 -0.7034463  0.84720445
 [8,] -0.4727848  0.25112743  2.3203398  0.18834232
 [9,] -0.3266285  0.01976186 -0.6332865  0.34977211
[10,] -1.2673215  0.50224618 -1.1047394  0.07891568
            [,5]
 [5,]  0.9250183
 [6,] -1.6632007
 [7,] -0.7437903
 [8,]  0.3626313
 [9,] -0.4463160
[10,] -0.4758092
> head(data,n=2)
           [,1]      [,2]      [,3]       [,4]
[1,]  0.9271701 0.1103936 0.1518877 -0.9958674
[2,] -0.3088481 0.2310695 1.2197350 -2.1594594
           [,5]
[1,] -1.6449042
[2,] -0.1726496

(3)数据提取:同矩阵,并增加$

> data1<-as.data.frame(data)
> colnames(data1)<-c("a1","a2","a3","a4","a5")
> data1$a1#查看一列
 [1]  0.927170051 -0.308848086  0.004737546 -1.240030080
 [5] -2.139280528 -1.306004328 -0.641711081 -0.472784834
 [9] -0.326628467 -1.267321492
> data1$a6<-c(1,1,3,4,6,7,1,6,8,7)#增加一列
> data1$a6
 [1] 1 1 3 4 6 7 1 6 8 7

5、数组(Array)

数组(Array)与矩阵类似,但维度可以大于2,数组可通过array()函数创建。

myarray <- array ( vector , dimensions , dimnames)

6、列表(List)

列表是各类数据类型的综合体,通常用于存储一系列数据。

#1.创建
> data1<-"haha"
> data2<-c(1,1,34,67)
> data3<-matrix(rnorm(20),nrow=5)
> data4<-data.frame(A=c(1,3,5),B=c(1,59,2),C=c(25,8,37))
> list1<-list(data1,data2,data3,data4)
> list1
[[1]]
[1] "haha"

[[2]]
[1]  1  1 34 67

[[3]]
            [,1]       [,2]        [,3]       [,4]
[1,]  1.40391987 -0.3872273 -0.56925471 -1.5023479
[2,] -0.48645122  2.1022144 -0.78480254 -0.7429623
[3,] -0.09993994 -0.4948093 -0.25565934 -0.8256904
[4,]  0.38858715  0.3699124  0.03840727  1.2355474
[5,] -0.40178326 -0.1122504  0.04224269 -0.8818120

[[4]]
  A  B  C
1 1  1 25
2 3 59  8
3 5  2 37
#2.查看命名
> names(list1)
NULL
#更新命名
> names(list1)[1]<-"data1"
#查看
> names(list1)[1]
[1] "data1"
> names(list1)[[1]]
[1] "data1"
> names(list1)
[1] "data1" NA      NA      NA     
> list1[[2]][1]
[1] 1
#合并
> list2<-list(data5=c(15,15,15))
> list3<-c(list1,list2)
> list3
$data1
[1] "haha"

$<NA>
[1]  1  1 34 67

$<NA>
            [,1]       [,2]        [,3]       [,4]
[1,]  1.40391987 -0.3872273 -0.56925471 -1.5023479
[2,] -0.48645122  2.1022144 -0.78480254 -0.7429623
[3,] -0.09993994 -0.4948093 -0.25565934 -0.8256904
[4,]  0.38858715  0.3699124  0.03840727  1.2355474
[5,] -0.40178326 -0.1122504  0.04224269 -0.8818120

$<NA>
  A  B  C
1 1  1 25
2 3 59  8
3 5  2 37

$data5
[1] 15 15 15

二、数据结构判断

> list2<-list(data5=c(15,15,15))
> is.vector(list2)
[1] TRUE
> is.matrix(list2)
[1] FALSE
> is.data.frame(list2)
[1] FALSE
> is.factor(list2)
[1] FALSE
> is.array(list2)
[1] FALSE
> is.list(list2)
[1] TRUE