R语言数据结构与类型

R有许多储存数据的结构,包括标量、向量、数组、数据框和列表。它们在存储数据的类型、创建方式、结构复杂度,以及用于定位和访问其中个别元素的标记等方面均有所不同。
R的数据类型包括数值型、字符型、逻辑型(TRUE/FALSE)、复数型(虚数)和原生型(字节)。

R语言数据结构与类型_第1张图片
image

在R语言中,连续变量是数值型。分类变量用因子(factor)表示,又分为名义型和有序型。

标量

标量是只含有一个元素的向量,例如f<-3、g<-‘US’和h<-TRUE。它们用于保存常量。

向量

向量(vector)是用于存储数值型、字符型或逻辑性数据的一维数据。执行组合功能的函数c()可以用来创建向量。
通过在方括号中给定元素所处位置的数值,可以访问向量中的元素。例如,a[c(2,4)]用于访问向量a中的第二个和第四个元素。更多示例如下:

#生成名为a的向量 
a <- c('k','j','h','a','c','m') 
#a的第三个元素 
a[3] 
[1] "h" 
#a的第一、三、五个元素 
a[c(1,3,5)] 
[1] "k" "h" "c" 
#a的2到6个元素,是使用冒号:生成的一个数值序列。
a[2:6]
[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)填充,默认情况下按列填充。

#生成一个名y的5行4列的矩阵
y <- matrix(1:20,nrow = 5,ncol = 4) 
y 
     [,1] [,2] [,3] [,4] 
[1,]    1    6   11   16 
[2,]    2    7   12   17 
[3,]    3    8   13   18 
[4,]    4    9   14   19 
[5,]    5   10   15   20
#生成一个名为cells的向量
cells <- c(1,26,24,68)
#生成一个名为rnames的向量
rnames <- c('R1','R2')
#生成一个名为cnames的向量
cnames <- c('C1','C2')
#生成一个名为mymatrix的矩阵,它有2行2列,按行填充,行列名分别是rnames、cnames
mymatrix <- matrix(cells,nrow = 2,ncol = 2,byrow = TRUE,dimnames = list(rnames,cnames))
mymatrix
   C1 C2
R1  1 26
R2 24 68
#生成一个名为mymatrix的矩阵,它有2行2列,按列填充,行列名分别是rnames、cnames
mymatrix <- matrix(cells,nrow = 2,ncol = 2,byrow = FALSE,dimnames = list(rnames,cnames))
mymatrix
   C1 C2
R1  1 24
R2 26 68

可以使用下标和方括号来选择矩阵中的行、列或元素。X[i,]选中矩阵X中的第i行,X[,j]选中第j列,X[i,j]选中第i行第j列个元素。选择多行或多列时,下标i和j可为数值型向量。

#生成一个名为x的两行矩阵 
x <- matrix(1:10,nrow = 2) 
x 
     [,1] [,2] [,3] [,4] [,5] 
[1,]    1    3    5    7    9 
[2,]    2    4    6    8   10 
#选中x矩阵的第2行 
x[2,] 
[1]  2  4  6  8 10
#选中x矩阵的第2列
x[,2]
[1] 3 4
#选中x矩阵的第1行第4列
x[1,4]
[1] 7
#选择x矩阵的第1行第4、5列
x[1,c(4,5)]
[1] 7 9

矩阵都是二维的。和向量类似,只能包含一种数据类型。当维度超过2时,则使用数组。数据类型多元时,则使用数据框

数组

数组(array)与矩阵类似,但是维度可以大于2。数组通过array函数创建,形式如下:
myarray<-array(vector,dimensions,dimnames)
其中vector包含数组中的数据,dimensions是一个数值型向量,指定各维度下标的最大值,而dimnames是可选的、各维度名称标签的列表。
下面给出一个三维(2×3×4)数组示例

dim1 <- c('A1','A2') 
dim2 <- c('B1','B2','B3') 
dim3 <- c('C1','C2','C3','C4') 
#生成一个名为z的数组 
z <- array(1:24,c(2,3,4),dimnames = list(dim1,dim2,dim3)) 
z 
, , C1 

   B1 B2 B3
A1  1  3  5
A2  2  4  6

, , C2

   B1 B2 B3
A1  7  9 11
A2  8 10 12

, , C3

   B1 B2 B3
A1 13 15 17
A2 14 16 18

, , C4

   B1 B2 B3
A1 19 21 23
A2 20 22 24

数组中的元素选取方法,同矩阵。上例中,元素z[1,2,3]为15。

数据框

数据框中不同列之间数据类型可以不同,数据框与通常在SAS、SPSS和STATA中的数据集类似。数据框是R中最常数据的数据结构。
数据框可以通过data.frame()创建:
mydata<-data.frame(col1,col2,col3,…)
其中列向量col1、col2、col3等可以是任何类型(字符型、数值型或逻辑型)。每一列的名称可由函数names指定。
举例:

patientID <- c(1,2,3,4) 
age <- c(25,34,28,52) 
diabetes <- c('Type1','Type2','Type1','Type1') > status <- c('Poor','Improved','Excellent','Poor') 
#生成一个名为patientdata的数据框 patientdata <- data.frame(patientID,age,diabetes,status) 
patientdata 
     patientID age diabetes    status 
   1         1  25    Type1      Poor
  2         2  34    Type2  Improved
  3         3  28    Type1 Excellent
  4         4  52    Type1      Poor

元素的选取如下:

#选中1和2列中的元素 
patientdata[1:2] 
  patientID age 
1         1  25 
2         2  34 
3         3  28 
4         4  52 
#选中列名为diabetes和status中的元素、 patientdata[c('diabetes','status')]
  diabetes    status1
    Type1      Poor
2    Type2  Improved
3    Type1 Excellent
4    Type1      Poor
#选中patientdata数据框中的age列
patientdata$age
[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是名义变量的唯一值的个数,同时一个由字符串组成的内部向量将映射到这些整数上。
名义变量示例如下:

diabetes
[1] "Type1" "Type2" "Type1" "Type1"
#生成一个名义变量
diabetes <- factor(diabetes)
diabetes
[1] Type1 Type2 Type1 Type
Levels: Type1 Type2

有序变量示例如下:

status
[1] "Poor"      "Improved"  "Excellent"
[4] "Poor"   
#生成一个有序变量  
status <- factor(status,ordered = TRUE)
status
[1] Poor      Improved  Excellent Poor     
Levels: Excellent < Improved < Poor

在factor函数中指定levels选项可以覆盖默认排序。

status <- factor(status,ordered = TRUE,levels = c('Poor','Improved','Excellent'))
status
[1] Poor      Improved      Excellent Poor     
Levels: Poor < Impoved < Excellent

数值型变量可以用levels和labels参数来编码成因子。例如将男性编码成1,女性编码成2。

sex <- c(1,2,1,1,2)
sex
[1] 1 2 1 1 2
sex <- factor(sex,levels = c(1,2),labels = c('Male','Female'))
sex
[1] Male   Female Male   Male   Female
Levels: Male Female

列表

列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象的有序集合。列表允许你整合若干对象到某个对象名下。
用函数list()创建,形式如下:
mylist<-list(object1,object2,…)
还可以为列表中的对象命名:
mylist<-list(name1=object1,name2=object2,…)
示例:

g <- 'My First List' 
h <- c(25,26,18,39) 
j <- matrix(1:10,nrow = 5) 
k <- c('one','two','three') 
#创建列表 
mylist <- list(title=g,ages=h,j,k) 
mylist 
$title 
[1] "My First List"

$ages
[1] 25 26 18 39

[[3]]
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

[[4]]
[1] "one"   "two"   "three"
#选择列表中第二个成分
mylist[[2]]
[1] 25 26 18 39
#选择列表中ages成分
mylist[['ages']]
[1] 25 26 18 39

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

mylist$ages
[1] 25 26 18 39

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

R语言数据结构与类型_第2张图片

你可能感兴趣的:(R语言数据结构与类型)