R 数据框、因子和列表|学习笔记

简介: 向量,矩阵和数组,它们共同的特点就是它们中的数据只能拥有一组模式,也就是可以尝试字符型,也可以尝试数值类型,但是不允许在一个向量中即出现字符型也出现数值型,如果一个数据类型中即想放数值型,也想放字符型,也就是不同的模式的数据,应该用什么样的方式进行存储?数据框就可以存放不同类型的数据。

开发者学堂课程【R 语言编程基础R 数据框、因子和列表】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/564/detail/7716


R 数据框、因子和列表

 

内容介绍

数据框

因子

列表

 

内容简介:

向量矩阵和数组它们共同的特点就是它们中的数据只能拥有一组模式也就是可以尝试字符型也可以尝试数值类型但是不允许在一个向量中即出现字符型也出现数值型如果一个数据类型中即想放数值型也想放字符型也就是不同的模式的数据应该用什么样的方式进行存储数据框就可以存放不同类型的数据

 

一、数据框

1、数据框的概念相对于矩阵它更普遍和一般数据框将会是在 R 中最经常处理的一种数据结构比如一个病例数据

image.png

实际上它的数据是一种典型的数据框的数据类型它的第一列是病人编号第二列是入院时间第三列是年龄前面的都是数值型第四列是糖尿病类型第五列是病情后面是字符串类型的数据这种数据的类型是多种模式的因此无法将这个数据集放入一个矩阵中所以使用数据框是最佳的选择

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)当使用符号$对数据集进行选取时每一次都要输入数据集的名字$再加上变量特别麻烦如果只输入变量名就可以获取变量的数据值需要 attachattach 可以将数据框添加到 R 的搜索路径中,R 遇到变量名之后就可以直接定位到数据框下的变量这样就不需要写变量名

(5)以变量数据集为例比如想取到变量数据集中病人年龄的变量值 age

patientsData$age

25 34 28 52

3、以汽车的数据集为例

head (mtcars)

这个数据集中有变量 mpgcyl如果要取到 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就是它在内部就将 Type11进行联系,Type22进行联系,Type33进行联系

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 的函数运行的结果都是以列表的形式进行返回在实践中可以感受到很多运行结果都是以列表形式进行返回式

相关文章
|
6月前
|
BI 测试技术 索引
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-1
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
7月前
|
数据采集 数据可视化 数据挖掘
使用Pandas对Data列进行基于顺序的分组排列
使用Pandas对Data列进行基于顺序的分组排列
95 0
|
4月前
|
Python
Python多维列表(元组)合并成一维形式
Python多维列表(元组)合并成一维形式
26 2
|
6月前
|
存储 API C语言
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)-2
Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组的复制、维度修改、拼接、分割...)
|
7月前
|
数据挖掘 计算机视觉 Python
Python实现对规整的二维列表中每个子列表对应的值求和
Python实现对规整的二维列表中每个子列表对应的值求和
74 0
|
Python
将列表按照指定的规则排序并添加平均值
将列表按照指定的规则排序并添加平均值
75 1
python实现将给定列表划分为元素和大致相等的两个子列表
python实现将给定列表划分为元素和大致相等的两个子列表
|
数据挖掘 Python
Pandas唯一值、值计数以及成员资格
Pandas唯一值、值计数以及成员资格
Pandas唯一值、值计数以及成员资格
|
索引 Python
python 对一组list数据,进行区间划分,按照大小排序并返回索引值
最近在对海洋数据进行处理时,对数据需要进行一些排序,数据匹配等操作; 现对我所希望实现的一些函数进行总结:
python 对一组list数据,进行区间划分,按照大小排序并返回索引值
|
索引 Python
python 将纬度按照10°为区间进行划分,并筛选在不同区间内sss的个数
要求:python 将纬度(list类型,包含1500个数据,从-90°-90°随机排列)按照每10°进行区间划分,并根据下标索引筛选在每一个区间内,所包含的sss(海表盐度)个数。
python 将纬度按照10°为区间进行划分,并筛选在不同区间内sss的个数