R语言数据结构与类型
Posted tidyss
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言数据结构与类型相关的知识,希望对你有一定的参考价值。
内容目录
标量向量矩阵数组数据框实例标识符因子列表
R有许多储存数据的结构,包括标量、向量、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同。
R的数据类型包括数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)和原生型(字节)。
在R语言中,连续变量是数值型。分类变量用因子(factor)表示,又分为名义型和有序型。
标量
标量是只含有一个元素的向量,例如f<-3、g<-‘US’和h<-TRUE。它们用于保存常量。
向量
向量(vector)是用于存储数值型、字符型或逻辑性数据的一维数据。执行组合功能的函数c()可以用来创建向量。
通过在方括号中给定元素所处位置的数值,可以访问向量中的元素。例如,a[c(2,4)]用于访问向量a中的第二个和第四个元素。更多示例如下:
1#生成名为a的向量
2a <- c('k','j','h','a','c','m')
3#a的第三个元素
4a[3]
5[1] "h"
6#a的第一、三、五个元素
7a[c(1,3,5)]
8[1] "k" "h" "c"
9#a的2到6个元素,是使用冒号:生成的一个数值序列。
10a[2:6]
11[1] "j" "h" "a" "c" "m"
R语言与其他编程语言不同。元素是从1开始算的,而不是零。如果在python中,a[3],返回a,a[0]返回k。
矩阵
矩阵(matrix)是一个二维数组,只有每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix()创建矩阵。一般使用格式为:
mymatrix<-matrix(vector,nrow=number_of_rows,ncol=number_of_columns,byrow=logical_value,dimname=list(char_vector_rownames,char_vector_colnames))
其中vector包含了矩阵的元素,nrow和ncol用来指定行和列的维数,dimnames指定行名与列名。byrow表明矩阵应按行(byrow=TRUE)或列(byrow=FALSE)填充,默认情况下按列填充。
1#生成一个名y的5行4列的矩阵,
2y <- matrix(1:20,nrow = 5,ncol = 4)
3y
4 [,1] [,2] [,3] [,4]
5[1,] 1 6 11 16
6[2,] 2 7 12 17
7[3,] 3 8 13 18
8[4,] 4 9 14 19
9[5,] 5 10 15 20
10#生成一个名为cells的向量
11cells <- c(1,26,24,68)
12#生成一个名为rnames的向量
13rnames <- c('R1','R2')
14#生成一个名为cnames的向量
15cnames <- c('C1','C2')
16#生成一个名为mymatrix的矩阵,它有2行2列,按行填充,行列名分别是rnames、cnames
17mymatrix <- matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(rnames,cnames))
18mymatrix
19 C1 C2
20R1 1 26
21R2 24 68
22#生成一个名为mymatrix的矩阵,它有2行2列,按列填充,行列名分别是rnames、cnames
23mymatrix <- matrix(cells,nrow = 2,ncol = 2,byrow = FALSE,dimnames = list(rnames,cnames))
24mymatrix
25 C1 C2
26R1 1 24
27R2 26 68
可以使用下标和方括号来选择矩阵中的行、列或元素。X[i,]选中矩阵X中的第i行,X[,j]选中第j列,X[i,j]选中第i行第j列个元素。选择多行或多列时,下标i和j可为数值型向量。
1#生成一个名为x的两行矩阵
2x <- matrix(1:10,nrow = 2)
3x
4 [,1] [,2] [,3] [,4] [,5]
5[1,] 1 3 5 7 9
6[2,] 2 4 6 8 10
7#选中x矩阵的第2行
8x[2,]
9[1] 2 4 6 8 10
10#选中x矩阵的第2列
11x[,2]
12[1] 3 4
13#选中x矩阵的第1行第4列
14x[1,4]
15[1] 7
16#选择x矩阵的第1行第4、5列
17x[1,c(4,5)]
18[1] 7 9
矩阵都是二维的。和向量类似,只能包含一种数据类型。当维度超过2时,则使用数组。数据类型多元时,则使用数据框
数组
数组(array)与矩阵类似,但是维度可以大于2。数组通过array函数创建,形式如下:
myarray<-array(vector,dimensions,dimnames)
其中vector包含数组中的数据,dimensions是一个数值型向量,指定各维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。
下面给出一个三维(2×3×4)数组示例
1dim1 <- c('A1','A2')
2dim2 <- c('B1','B2','B3')
3dim3 <- c('C1','C2','C3','C4')
4#生成一个名为z的数组
5z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3))
6> z
7, , C1
8
9 B1 B2 B3
10A1 1 3 5
11A2 2 4 6
12
13, , C2
14
15 B1 B2 B3
16A1 7 9 11
17A2 8 10 12
18
19, , C3
20
21 B1 B2 B3
22A1 13 15 17
23A2 14 16 18
24
25, , C4
26
27 B1 B2 B3
28A1 19 21 23
29A2 20 22 24
数组中的元素选取方法,同矩阵。上例中,元素z[1,2,3]为15。
数据框
数据框中不同列之间数据类型可以不同,数据框与通常在SAS、SPSS和STATA中的数据集类似。数据框是R中最常数据的数据结构。
数据框可以通过data.frame()创建:
mydata<-data.frame(col1,col2,col3,…)
其中列向量col1、col2、col3等可以是任何类型(字符型、数值型或逻辑型)。每一列的名称可由函数names指定。
举例:
1patientID <- c(1,2,3,4)
2age <- c(25,34,28,52)
3diabetes <- c('Type1','Type2','Type1','Type1')
4> status <- c('Poor','Improved','Excellent','Poor')
5#生成一个名为patientdata的数据框
6patientdata <- data.frame(patientID,age,diabetes,status)
7patientdata
8 patientID age diabetes status
91 1 25 Type1 Poor
102 2 34 Type2 Improved
113 3 28 Type1 Excellent
124 4 52 Type1 Poor
元素的选取如下:
1#选中1和2列中的元素
2patientdata[1:2]
3 patientID age
41 1 25
52 2 34
63 3 28
74 4 52
8#选中列名为diabetes和status中的元素
9patientdata[c('diabetes','status')]
10 diabetes status
111 Type1 Poor
122 Type2 Improved
133 Type1 Excellent
144 Type1 Poor
15#选中patientdata数据框中的age列
16patientdata$age
17[1] 25 34 28 52
$的快捷键位shift+字母表上方的4
实例标识符
编号用于区别数据集中不同的个体,实例标识符可通过数据框函数中的rowname选项指定。例如:
1patientdata <- data.frame(patientID,age,diabetes,status,row.names = patientID)
因子
变量可以是连续性变量、名义变量和有序变量。
名义变量是没有顺序之别的分类变量。如patientdata中的Diabetes(Type1,Type2)。
有序变量是有顺序高低的分类变量
如patientdata中的status(poor、improved、excellent)
名义变量和有序变量在R中称为因子(factor)
它用函数factor()生成,以一个整数向量的形式存储类别值,整数的取值范围是[1:k]其中k是名义变量的唯一值的个数,同时一个由字符串组成的内部向量将映射到这些整数上。
名义变量示例如下:
1diabetes
2[1] "Type1" "Type2" "Type1" "Type1"
3#生成一个名义变量
4diabetes <- factor(diabetes)
5diabetes
6[1] Type1 Type2 Type1 Type1
7Levels: Type1 Type2
有序变量示例如下:
1status
2[1] "Poor" "Improved" "Excellent"
3[4] "Poor"
4#生成一个有序变量
5status <- factor(status,ordered = TRUE)
6status
7[1] Poor Improved Excellent Poor
8Levels: Excellent < Improved < Poor
在factor函数中指定levels选项可以覆盖默认排序。
1status <- factor(status,ordered = TRUE,levels = c('Poor','Improved','Excellent'))
2status
3[1] Poor Improved Excellent Poor
4Levels: Poor < Impoved < Excellent
数值型变量可以用levels和labels参数来编码成因子。例如将男性编码成1,女性编码成2。
1sex <- c(1,2,1,1,2)
2sex
3[1] 1 2 1 1 2
4sex <- factor(sex,levels = c(1,2),labels = c('Male','Female'))
5sex
6[1] Male Female Male Male Female
7Levels: Male Female
列表
列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象的有序集合。列表允许你整合若干对象到某个对象名下。
用函数list()创建,形式如下:
mylist<-list(object1,object2,…)
还可以为列表中的对象命名:
mylist<-list(name1=object1,name2=object2,…)
示例:
1g <- 'My First List'
2h <- c(25,26,18,39)
3j <- matrix(1:10,nrow = 5)
4k <- c('one','two','three')
5#创建列表
6mylist <- list(title=g,ages=h,j,k)
7mylist
8$title
9[1] "My First List"
10
11$ages
12[1] 25 26 18 39
13
14[[3]]
15 [,1] [,2]
16[1,] 1 6
17[2,] 2 7
18[3,] 3 8
19[4,] 4 9
20[5,] 5 10
21
22[[4]]
23[1] "one" "two" "three"
24#选择列表中第二个成分
25mylist[[2]]
26[1] 25 26 18 39
27#选择列表中ages成分
28mylist[['ages']]
29[1] 25 26 18 39
如果列表中的成分已经命名,可以用命名选中。如
1mylist$ages
2[1] 25 26 18 39
列表成为R中的重要数据结果的原因。首先,列表允许以一种简单的方式组织和重新调用不相干的信息。
其次,许多R函数的运行结果都是以列表的形式返回,方便分析人员选取成分。
以上是关于R语言数据结构与类型的主要内容,如果未能解决你的问题,请参考以下文章