开发者学堂课程【R 语言编程基础:R 数据集的概念、向量、矩阵和数组】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/564/detail/7715
R 数据集的概念、向量、矩阵和数组
内容介绍
一、数据集的概念
二、R 的数据结构
三、向量
四、矩阵
五、数组
一、数据集的概念
1、按照某种格式来创建数据集,是任何数据分析的第一步
(1)选择一种数据结构将导入数据进行存储
(2)将数据输入或导入到这个数据结构中
2、向 R 中导入数据有很多方便的方法,可以手工输入数据,这只针对数据集比较小,工作量不大的情况,也可以从外部源导入数据,数据源可以是电子表格(EXCEL)、文本文件(txt)、统计软件(SAS)和各类数据库(MySq|)等,从外部源导入数据是经常使用的 R 导入数据的方法。
3、数据集通常是由数据构成的一一个矩形数组,行表示记录,列表示属性(字段),以假想的病例数据集进行举例:
有四行记录,五个属性,这样的数据是 R 中常见的一种数据集。
二、R 的数据结构
1、R 拥有许多用于存储数据的对象类型,包括向量、矩阵、数组、数据框和列表。它们这种创建的方式,有时候不需要访问数据集中所有的数据,比如定位到其中的某一行某一列数据等等访问的方式或者方法,都是有所不同的。
2、这些数据结构在存储数据的类型、创建方式、定位和访问其中个别元素的方法等方面都有所不同。
数据框体现的是各列的模式可以不同,列表体现的是各个元素可以不一样,第一个元素可以存储向量,第二个元素可以存储一个数组,第三个放一个矩阵等等,这就是列表所能实现的数据的存储功能。
三、向量
1、向量可以存储数值型或者复合型,逻辑性数据的一维数组,执行组合功能的函数,c 括号可以用来创建向量。
2、比如使用 a 存储向量,这个向量是1,3,5,7,2,-4,那么使用 c 括号就可以创建一个名为 a 的向量,向量的内容是1,3,5,7,2,-4。
a <- c(1,3,5,7,2,-4)
1 3 5 7 2 -4
3、向量不仅可以存储数值型,还可以存储字符型,b 创建了三个字符串的一维向量。
b<- c("one","two", "three")
"one "
"two"
"three"
4、可以放入一些逻辑值,因为创建的是逻辑值,所以不需要引号。
-
c
<-c
(TRUE ,TRUE ,FALSE,FALSE,TRUE )
这就是存储逻辑性一维的向量。
5、注意,单个向量中的数据,它必须要拥有相同的类型,比如以上列举的三个向量,a 存放的是数值型,当在创建时输入数字是可以的,但是如果输入数字又输入字符串,这个是不允许的,
比如 a <- c(1,3,5, "one"),原本1,3,5是想作为数字进行存入,但是在输入字符串时,它会默认将输入的1,3,5看作是字符串,所以 R 在创建向量时,其中的数据必须是相同的类型或者模式。
6、当创建一个向量后,如果不需要提供所有的元素,需要对其中特定的元素进行访问时,需要如何访问?
(1)单独元素访问的方式有很多,比如想要访问向量 a 中第三个元素,就可以访问到5这个字符串。
a[3]
‘’5‘’
(2)也可以这样进行访问。
a[c(1,3,4)]
‘’1‘’ ‘’5‘’ ‘’one‘’
(3)还有一个访问方式是从第几个到第几个的元素可以排除。
a[1:3]
‘’1’’ ‘’3’’ ‘’5’’
四、矩阵
1、矩阵跟向量不一样的地方是矩阵是一个二维的数组,它的每个元素也必须拥有相同的模式,也就是数值型,字符型或逻辑型,可以用函数 matrix 创建一个矩阵。可以在函数前面加问号,就可以打开关于 matrix 的函数的介绍,创建的矩阵有多少行,多少列。
matrix(data = NA,nrow = 1, ncol = 1, byrow = FALSE,dimnames = NULL)
如果想创建一个2*3的矩阵,还是想创建一个3*2的矩阵,就可以进行设定,byrow= FALSE 是按列进行填充,如果是true,就是按行进行填充,dimnames 是定义行和列的名字。
2、在 R 中定义一个矩阵,5到24连续的20个数字,四行,五列,矩阵是 y。
Y<-matrix(5:24,nrow-4,nco1=5)
定义了矩阵的数字,包括它有多少行,多少列,行名,列名,以及如何进行填充,填充不写就是默认按列进行填充。所以首先是按照5,6,7,8的顺序进行矩阵的填充,后面是9,10,11,12。
[,1] [,2] [,3] [,4] [,5]
[,1] 5 9 13 17 21
[,2] 6 10 14 18 22
[,3] 7 11 15 19 23
[,4] 8 12 16 20 24
3、创建带列名,行名标签的矩阵。
输入x <- C(2,45,68,94)
rnames <- c ("R1", "R2")
cname <- c("C1"
,
"C2 ")
newMatzix <- (x, nrow=2, ncol=2, byrow=TRUE, dimnames
=
list (rnames, cnames) )
在创建矩阵时报错,原因是在创建时没有写函数名。
newMatzix <- matrix(x, nrow=2, ncol=2, byrow=TRUE, dimnames
=
list (rnames, cnames) )
按行进行填充2*2的矩阵。
C1 C2
R1 2 45
R2 68 94
按列进行填充,修改命令,可以得到按列填充2*2的矩阵
newMatzix <- matrix(x, nrow=2, ncol=2, dimnames
=
list (rnames, cnames) )
C1 C2
R1 2 68
R2 45 94
4、在访问矩阵时也会只访问其中个别元素,矩阵对单独元素的访问是通过下标和方括号进行选择,举例说明。
x
<
-
matrix(1 :20,nrow- 4 )
[,1] [,2] [,3] [,4] [,5]
[,1] 1 5 9 13 17
[,2] 2 6 10 14 18
[,3] 3 7 11 15 19
[,4] 4 8 12 16 20
如果要访问其中的第三行,列是考虑所有的列,所以可以不用书写。
x[3,1]
3 7 11 15 19
比如访问这个矩阵中第二行第三个元素。
x[2,3]
10
如果是单独的一列,不考虑行。
x[,4]
13 14 15 16
5、矩阵是一个二维的数据结构,它和向量是类似的,它在矩阵中仅仅只能包含一组数据类型,所以当维度超过二时,就需要考虑其他的数据集。
五、数组
1、数组与矩阵是类似的,但是它的维度大于2,数组是通过 array 函数进行创建。输入?array 查看这个函数的说明。
Array
(
data
=
NA dim = length (data), dimnames = NULL)
as. ar ray(x,
....
)
is. array(x)
在定义一个数组时第一个是数据集,第二个是要对数据集的维度进行说明,第三个是维度的名字。数组的维度可以大于2,比如创建一个三维的数组,2*3*4,可以把三维数组想像成一个立方体。
2、通过具体的例子创建数组,首先定义数组每一维度的名字,第一维有三个名字,第二维有两个名字,第三维有四个名字。
?array
dim1 <- c ("A1", "A2 ""A3")
dim2 <- c("B1", "B2")
dim3 <- c("C1", "C2", "C3", "C4")
这是一个3*2*4的数组,有24个数字,创建数据集,直接1到24定义这个数据集,希望它的维度是3*2*4,
d<-array(1:24, c(3,2,4), dimnames=1ist (dim1,dim2 ,dim3) )
这样就生成了一个三维的数据,相当于四个矩阵。每一个矩阵都是3*2*4的格式。
, , C1
B1 B2
A1 1 4
A2 2 5
A3 3 6
, , C2
B1 B2
A1 7 10
A2 8 11
A3 9 12
, , C3
B1 B2
A1 13 16
A2 14 17
A3 15 18
, , C4
B1 B2
A1 19 22
A2 20 23
A3 21 24
3、数组就是矩阵的推广或者扩充,从数组中选取元素的方式跟矩阵也是类似的,比如选取数字16,对应的第一维也就是第一行,第二维是第二列,第三维就是第三个矩阵,所以这就是数组定义元素的方法,实际上和矩阵是非常类似的。
d[1,2,3]
16
4、数组中的元素也只能通过一种模式。