数据结构指的是数据的组织形式,在R语言中常见的数据结构包括向量、矩阵、列表和数据框等。以下对它们进行简要的介绍。
向量就是同质数据构成的序列,这里讲的“同质”指的是所包含的数据类型必须是一致的。在R语言中可以利用函数
c()
来进行定义:
c(1,3,4)
## [1] 1 3 4
c("你","我","他")
## [1] "你" "我" "他"
可以使用
length
函数来获得向量的长度:
length(c(1,3,4))
## [1] 3
可以使用
is.vector
来判断一个变量是否为一个向量:
is.vector(c(1,3,4))
## [1] TRUE
矩阵是由同质数据构成的二维数组,在R语言中可以利用
matrix
函数来对其进行创建。创建的时候,可以先构建一个向量,然后对矩阵的行列数进行声明,这样就可以获得一个按照一定的排列顺序组成的矩阵:
matrix(1:9,nrow = 3,ncol = 3)
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
上面的
1:9
表示的是1到9的所有正整数,而
nrow
和
ncol
参数则指明我们需要3行3列的矩阵。实际上,定义一个参数也可,也就是我们还可以这样去定义:
matrix(1:9,nrow = 3)
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
matrix(1:9,ncol = 3)
## [,1] [,2] [,3]
## [1,] 1 4 7
## [2,] 2 5 8
## [3,] 3 6 9
使用
dim
函数可以知道矩阵一共有几行几列:
a = matrix(1:12,ncol = 3)
dim(a)
## [1] 4 3
根据结果,变量
a
是一个4行3列的矩阵。可以使用
is.matrix
函数来判断一个变量是否为矩阵:
is.matrix(a)
## [1] TRUE
列表是R语言中最为灵活的数据结构,它是任意R对象的有序集合,可以容纳任意数据类型:
a = list(3,TRUE,"hello")
a
## [[1]]
## [1] 3
##
## [[2]]
## [1] TRUE
##
## [[3]]
## [1] "hello"
可以使用
length
函数来观察其长度:
length(a)
## [1] 3
同样,我们可以使用
is.list
函数来判断一个变量是否为一个列表:
is.list(a)
## [1] TRUE
数据框是一种特殊的二维数据结构。同为二维数据结构,与矩阵不同的是,它的每一列可以视为一个向量,而每一行则可以视为一个列表。因此在一个数据框中可以有不同的属性(以列的形式存在),每一行则代表着一个观测实体。我们可以对R语言自带数据集
iris
进行观察,看看它每一列分别是什么数据类型:
library(pacman)
p_load(tidyfst)
as_dt(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## <num> <num> <num> <num> <fctr>
## 1: 5.1 3.5 1.4 0.2 setosa
## 2: 4.9 3.0 1.4 0.2 setosa
## 3: 4.7 3.2 1.3 0.2 setosa
## 4: 4.6 3.1 1.5 0.2 setosa
## 5: 5.0 3.6 1.4 0.2 setosa
## ---
## 146: 6.7 3.0 5.2 2.3 virginica
## 147: 6.3 2.5 5.0 1.9 virginica
## 148: 6.5 3.0 5.2 2.0 virginica
## 149: 6.2 3.4 5.4 2.3 virginica
## 150: 5.9 3.0 5.1 1.8 virginica
在这里,我们利用了tidyfst包的
as_dt
函数,把iris转换为data.table格式,然后在tidyfst包环境下自动显示数据类型。我们可以看到,前4列都是数值型变量(num是numeric的缩写),而最后一列则是因子型(fct是factor的缩写)。如果需要知道数据框有几行几列,依然可以使用
dim
函数进行实现:
dim(iris)
## [1] 150 5
同时,可以利用
is.data.frame
函数来判断一个变量是否为数据框:
is.data.frame(iris)
## [1] TRUE