开发者学堂课程【R 语言编程基础:R 数据框、因子和列表】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/564/detail/7716
R 数据框、因子和列表
内容介绍:
一、数据框
二、因子
三、列表
内容简介:
向量,矩阵和数组,它们共同的特点就是它们中的数据只能拥有一组模式,也就是可以尝试字符型,也可以尝试数值类型,但是不允许在一个向量中即出现字符型也出现数值型,如果一个数据类型中即想放数值型,也想放字符型,也就是不同的模式的数据,应该用什么样的方式进行存储?数据框就可以存放不同类型的数据。
一、数据框
1、数据框的概念相对于矩阵,它更普遍和一般,数据框将会是在 R 中最经常处理的一种数据结构,比如一个病例数据。
实际上它的数据是一种典型的数据框的数据类型。它的第一列是病人编号,第二列是入院时间,第三列是年龄,前面的都是数值型,第四列是糖尿病类型,第五列是病情,后面是字符串类型的数据,这种数据的类型是多种模式的,因此无法将这个数据集放入一个矩阵中,所以使用数据框是最佳的选择。
2、数据框是通过函数 data.frame 进行创建的。手动创建一个数据框,第一列是病人的 ID,第二列是病人的年龄,第三列不输入时间的类型,直接输入第四列糖尿病的类型,最后一个数据列是状态。用 data.frame 创建数据框,这个是病人的数据,后面的参数放每一列的名字。
patientID <- c(1,2,3,4)
age<- c(25, 34, 28, 52)
diabetes <- c ("Type1", "Type2", "Type3", "Type2")
status <- c("poor", " Improved", "Excllent", "poor")
patientsData <- data. frame (patientID, age, diabetes,status)
patientsData
patientID age diabetes
status
1 25
Type1
poor
2
34
Type2
Improved
3
28
Type3
Excllent
4
52
Type2
poor
列和列之间的数据模式可以一样,但是每一列它的数据模式必须是唯一的,在矩阵或者数组中通常是用中括号以及矩阵行列的数值对矩阵单独的元素进行定位,在数据框中也可以使用中括号和下标记号的方法对数据框单个元素进行访问。
(1)比如想取数据框中第一列和第二列,patientsdata,可以用1-2方式进行获取,获得病人的 ID 和病人的年龄。
patientsData[1:2]
patientID age
1 25
2 34
3 28
4 52
(2)用向量 c,通过列名取到该列的数据。
patientsData [c ("diabetes", "status")
+
]
Diabetes
status
Type1
poor
Type2
Improved
Type3
Excllent
Type2
poor
(3)用符号$对数据进行读取,读取数据集年龄。
patientsData$age
25 34 28 52
(4)当使用符号$对数据集进行选取时,每一次都要输入数据集的名字,加$再加上变量,特别麻烦,如果只输入变量名就可以获取变量的数据值,需要 attach,attach 可以将数据框添加到 R 的搜索路径中,R 遇到变量名之后就可以直接定位到数据框下的变量,这样就不需要写变量名。
(5)以变量数据集为例,比如想取到变量数据集中病人年龄的变量值 age。
patientsData$age
25 34 28 52
3、以汽车的数据集为例。
head (mtcars)
这个数据集中有变量 mpg,cyl,如果要取到 mpg 变量名下面的数据,现在使用的方式是 mtcars$mpg,可以取到它,但是如果单独输入 mpg,这样变量是没有的,如何通过直接输入变量进行获取变量下面的数据,就要使用 attach函数,把 mtcars 数据框添加到R的搜索路径中,再单独输入 mpg 就可以得到数据。
attach (mtcars )
Mpa
这样就可以直接输入变量名获取其中的数据值,相对于将这个数据框加入到 R 的搜索路径中,也有反向操作,就是将数据框从 R 的搜索路径中移除,移除的命令是 detach (mtcars ),这样就将数据框从路径中进行移除,移除之后再使用 mpg,找不到变量。注意,detach 函数并不会对数据框本身做任何处理,用 detach 仅仅是将数据框从搜索路径中移除,并没将 mtcars 数据框移除,除了 detach 函数,还有 with 函数可以实现 detach 相近的功能,比如 with 加入 mtcars 数据框,加入大括号,直接对 mtcars 里面的 mpg 变量进行操作,把它进行赋值,再输出显示 l。
with
(mtcars
,{
+1<-mpg
+1}
+
)
在 with 中指明 mtcars 数据框,因此不需要加数据框的名字,其中的变量进行操作,操作的结果也可以进行展示,注意,直接取变量里面的数据集,它仅仅只局限于在 with 后面的大括号里面这些操作,离开大括号之后,效果就不存在了。比如在with大括号里面创建l的一个变量,并且把 mpg 的数值赋值给 l,在 with 之外输入 l,是找不到变量 l的。
二、因子
1、因子是以等数下面的形式进行存储类别值,也就是名义型的数据,比如 diabetes,"Type1" "Type2" "Type3" "Type2",病人类别的数据,如果函数 factor 可以将原来类别型的变量转化成指数型的向量。把 diabetes 进行转换,diabetes <- factor (diabetes),用函数 factor 后,相当于把 Type1,Type2,Type3用数字的向量进行存储,输入diabetes 查看有什么变化,跟之前不一样的是它虽然也会输出别名,但是它显示 levels,就是它在内部就将 Type1和1进行联系,Type2和2进行联系,Type3和3进行联系。
diabetes <- factor (diabetes)
Type1 Type2 Type3 Type2
Levels: Type1 Type2 Type3
2、同时针对向量 diabetes 进行任何分析,它都会作为名义型的变量进行对待,并选择适合这个测量尺度的统计方法。
三、列表
1、列表是 R 数据类型中最为复杂的一种数据类型,列表就是一些对象的有序集合,列表是允许整合若干个对象到单个对象的名下,也就是列表中可能有若干个向量或者若干个矩阵以及数据框,或者其他列表的组合,可以使用函数 list 创建一个列表,比如创建 mylist:
Mylist<- list (object1, object2,........)
用这种模式就可以创建列表,列表中的对象可以是任何一个数据,可以存向量,也可以存矩阵,数据甚至数据框等等。
2、举例,首先创建所需要的各种对象,一个对象是字符型数据,字符串是 my first list,第二个对象是向量,12,45,43,90,第三个对象是矩阵,第四个存放的是字符型的数据,
G <-"My first list"
h <- c(12, 45, 43, 90)
j <- matrix(l:10, nrow=2)
k <- c("one", "two", "three")
创建好四个对象,需要把四个对象放在一个地点中进行存储,
mylist<-list (g,h,j,k)
这样就生成 mylist 列表。
Mylist
[[1]]
[1] "My first list"
[[2]]
[1]12 45 43 90
[[3]]
[,1] [,2] [,3] [,4] [,5]
[1, ] 1 3 5 7 9
[2, ] 2 4 6 8 10
[[4] ]
[1]"one" "two " "three "
第一个对象是字符型,第二个是向量,第三个是矩阵,第四个是字符型的向量,这就是 list 数据类型。
3、如何单独访问 list 当中的元素,比如访问 list 中的第二个对象,list 表和其他的数据类型访问元素的方式有些不一样,其他访问元素时采用的是中括号的形式,也就是一个方括号的形式,list 要通过双重方括号进行访问,比如访问mylist 中第二个对象,可以通过 mylist[[2]]得到12,45,43,90,如果指定了列名时也可以在方括号中加入列名进行访问列表中的对象,列表是 R 中非常重要的数据结构,它之所以重要,主要有两个方面的原因,第一个列表允许一组简单的方式进行组织和重新调用它并不相干的一些信息,第二个是有许多 R 的函数运行的结果都是以列表的形式进行返回,在实践中可以感受到,很多运行结果都是以列表形式进行返回式。