R使用笔记(2)数据结构

这篇文章主要涉及R语言中的五种数据结构 # 数据结构

R中有许多用于存储数据的结构,包括标量(只含一个元素的向量)、向量(vector)、数组(array)、数据框(data frame)和列表(list)。

向量

向量用于存储数值型、字符型或逻辑型数据的一维数组,结合函数c()可以用来创建向量。

示例2-1

1
2
3
a <- c(1,2,3,4,5) #数值型
b <- c("one","two","three") #字符型
c <- c(TRUE,TRUE,FALSE) #逻辑型

矩阵

矩阵是一个二维数组,每个元素都拥有相同的模式,可以通过matrix()创建矩阵。

示例2-2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
> 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 <- c(1,26,24,68)
> rnames <- c("R1", "R2")
> cnames <- c("C1", "C2")
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=TRUE, dimnames=list(rnames, cnames))
> mymatrix
C1 C2
R1 1 26
R2 24 68
> mymatrix <- matrix(cells, nrow=2, ncol=2, byrow=FALSE, dimnames=list(rnames, cnames))
> mymatrix
C1 C2
R1 1 24
R2 26 68
> y[1, c(3,4)] #矩阵下标的使用
[1] 11 16

数组

数组与矩阵类似,只不过维度可以大于2,数组可以通过array()函数来创建

示例2-3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
> dim2 <- c("B1", "B2", "B3")
> dim1 <- c("A1", "A2")
> dim2 <- c("B1", "B2", "B3")
> dim3 <- c("C1", "C2", "C3", "C4")
> 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

数据框

由于不同的列可以包含不同的模式(字符型、数值型),所以数据框(data frame)是R中最常处理的数据结构,数据框可以通过data.frame()创建

1
mydata <- data.frame(col1, col2, col3,...)

其中的列向量等可以为任何数据类型,每一列的名称可由names指定。

因子

变量可以归结为名义型、有序型、或连续型变量,类别(名义型)变量和有序类别(有序型)在R中称为因子(factor)。

例如,假设有向量:

1
diabetes <- c("Type1","Type2","Type1","Type1")

语句dibetes <- factor(diabetes)将此向量存储为(1,2,1,1),并在内部将其关联为1=Type1和2=Type2。

对于字符型向量,因子的水平默认依字母顺序创建,比如“Excellent”“Improved”“Poor”的排序方式恰好与逻辑顺序相一致,现实是很少有这种情况让人满意。

可以通过指定levels选项来覆盖默认排序:

1
2
3
> status <- c("Poor", "Improved", "Excellent", "Poor")
> status <- factor(status, order=TRUE,
levels=c("Poor", "Improved", "Excellent")) #通过levels选项来覆盖默认排序

数值型变量也可以用levelslabels来编码成为因子,如,男性被编码成1,女性被编码成2

1
> sex <- factor(sex, levels=c(1,2), labels=c("Male", "Female"))

列表

列表(list)就是一些对象的有序集合,可以是字符型、数值型、矩阵,可以组合成为任意多的对象,并存在一个向量里面。

示例2-4

1
2
3
4
5
6
> 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
不积跬步,何以至千里?
分享到: