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包含了矩阵的元素,nrowncol用来指定行和列的维数,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[13 4
13#选中x矩阵的第1行第4列
14x[1,4]
15[17
16#选择x矩阵的第1行第4、5列
17x[1,c(4,5)]
18[17 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。

扫描二维码关注公众号,回复: 9004271 查看本文章

数据框

数据框中不同列之间数据类型可以不同,数据框与通常在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[125 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[11 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[125 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[125 26 18 39
27#选择列表中ages成分
28mylist[['ages']]
29[125 26 18 39

如果列表中的成分已经命名,可以用命名选中。如

1mylist$ages
2[125 26 18 39

列表成为R中的重要数据结果的原因。首先,列表允许以一种简单的方式组织和重新调用不相干的信息。
其次,许多R函数的运行结果都是以列表的形式返回,方便分析人员选取成分。

发布了38 篇原创文章 · 获赞 13 · 访问量 3310

猜你喜欢

转载自blog.csdn.net/renewallee/article/details/102811693