R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
这节课我们来学校R语言中的高级操作——数据转换
读写R格式文件
R提供了两种存储的方式,一种时候.Rds文件,一种是Rdata文件。
Rdata文件类似于工程文件,会存储所有导入的数据集和处理的数据
Rdse文件是保存数据集的文件,比如iris数据
<1>使用saveRds命令可以将数据集保存为Rds格式
将readRds赋值给一个变量x,可以完成对Rds文件的读取。
<2>使用load()函数可以直接打开Rdata文件。
数据转换(一)
#首先,使用openxlsx包中的read.xlsx()函数打开mtcars.xlsx文件
read.xlsx('mtcars.xlsx',sheet = 1,startRow = 1)
#将其赋值为car32变量
car32 <- read.xlsx('mtcars.xlsx',sheet = 1,startRow = 1)
可以使用is.data.frame()判断是否为数据框
is.data.frame(car32)
结果是ture,说明数据是数据框
is.data.frame()函数还可以将数据转换为数据框格式
unlist()可以用于转化成列表
as.factor、as.vector可以用来转化成因子和向量。
数据转换(二)
如何对数据取子集?
可以使用索引的方式:
who <- read.csv("WHO.csv",header = T)
取该数据集的前50行,10列
who1 <- who[c(1:50),c(1:10)]
也可以不连续的提取,取该数据集的1,3,5,8行,2,14,18列:
who2 <- who[c(1,3,5,8),c(2,14,18)]
还可以使用逻辑值来进行筛选,比如使用which函数取出who数据集中continent列的值等于7的数据集合:
who3 <- who[which(who$Continent==7),]
还可以使用逻辑值的设置范围进行取值:
who4 <- who[which(who$CountryID>50 &who$CountryID<=100),]
取出who数据集中CountryID列的值在50到100之间的数据集合
可以直接使用subset()函数进行子集的提取
who4 <- subset(who,who$CountryID>50 &who$CountryID<=100)
在R中可以使用sample函数进行随机抽样
x <- 1:100
(设置一个x样本,数据范围在1到100)
sample(x,30)
(随机取x中的30个样本)
sample(x,30,replace = T)
(随机取x中的30个样本,但是是有放回的抽样,也就是说样本中可以有重复数字出现)
sample函数用于数据框时,如下
who[sample(who$CountryID,30,replace =F),]随机取出了一个子集
如何删除固定行?最简单的就是使用负索引的方式,如下
mtcars[-1:-5,] 删除对应的列,逗号在前,删除对应的行
将列的值赋值给NULL,相当于清空该列的值
mtcars$mpg <- NULL
数据框如何进行添加与合并?
最简单的方法是使用data.frame()直接生成一个新的数据框
data.frame(USArrests,state.division)
如果单纯的想添加一列,可以用cbind函数
cbind(USArrests,state.division)
直接在数据后面添加一列state.division的数据
但是添加行不容易,因为使用Rbind()必须两者的列名是一样的,下面进行一个示范:
data1 <- head(USArrests,20) 取出前20行数据
data2 <- tail(USArrests,20) 取出后20行数据
rbind(data1,data2) 将两个行合并
在使用cbind和rbind的时候,数据必须有相同的行数和列数
如果数据集中有重复的数据应该如何处理呢?
假设取一个50个数据量的数据集的两个子集,容量分别为30,重复的数据有10
data1 <- head(USArrests,30)
data2 <- tail(USArrests,30)
使用rbind合并
data4 <- rbind(data1,data2)
使用duplicated(data4)判断哪些是重复值,取出重复值:
data4[duplicated(data4),]
加感叹号取出非重复的部分 (感叹号是取反的意思)
data4[!duplicated(data4),]
可以使用unique()函数一步完成非重复部分的提取
unique(data4)