R 语言是为数学研究工作者设计的一种数学编程语言,主要用于统计分析、绘图、数据挖掘。 机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
这篇是对数据框进行操作分析
数据转换(三)
数据框的翻转
使用t()函数可以实现数据框的转置,行转成列。列转成行
sractm <- t(mtcars)
翻转单独一行
可以使用rev()函数
rev(row.names(women))
women[rev(row.names(women)),]
先试用rev()函数翻转利用row.names()函数取得的行名,然后再将翻转后的行名作为索引,取出该行就行
如何修改数据框的值
比如将women数据框中的height列数据的值的单位由英寸转化成厘米
women$height*2.54
data.frame(women$height*2.54,women$weight)
先取出这一列,让数值全部乘以换算值,之后使用data.frame()函数重新组合成一个数据框
但这种方法并不高效
<1>可以使用transform()函数
transform(women,height=height*2.54)
<2>如果不想更改原来的数据,也可以直接用transform增加一列
transform(women,cm=height*2.54)
如何对数据框进行排序
Sort()对向量进行排序,返回的是排序后的结果向量,rev(sort())则是按照相反的顺序进行排序
Order()也可以对向量进行排序,但返回的是向量所在的位置,也即是向量中 元素的索引
如果想按照某一行的元素的大小顺序进行排序,利用order的话可以这样写:
order(mtcars$cyl)
mtcars[order(mtcars$cyl),]
如果想取相反的顺序,直接在数据前添加一个负号即可
mtcars[order(-mtcars$cyl),]
还可以进行多重条件下的排序
mtcars[order(mtcars$mpg,mtcars$disp),]
数据转换(四)
如何对数据框进行数学计算?
有很多种方法,以wordphones数据为例:
rs <- rowSums(WorldPhones)
cm <- colMeans(WorldPhones)
rowsums()和colmeans()函数可以计算行和还有列的平均数
使用cbind()函数可以直接在数据后面添加计算后的一列数据
total <- cbind(WorldPhones,total=rs)
使用rbind()函数可以直接在数据后面添加计算后的一行数据
total2 <- rbind(WorldPhones,meanvalue=cm)
#在R中提供了apply系列函数
#首先是apply()函数的用法,对数据框的每一行进行求和
apply(WorldPhones,MARGIN = 1,FUN =sum)
#其中,wordphones代表要进行求和的数据集
margin是数据的维数,margin=1代表按行,margin=2代表按列,FUN参数代表使用的函数
对数据框的每一列进行求平均值
apply(WorldPhones,MARGIN = 2,FUN =mean)
对数据框的每一列进行求log值(对数值)
apply(WorldPhones,MARGIN = 2,FUN =log)
lapply()函数用法与apply()函数类似,不过返回值是列表,同理,sapply()也是返回值不同,sapply()函数返回的是向量或者矩阵。
以state.center数据为例,该数据是列表数据:
统计一下列表中元素的个数:
lapply(state.center,FUN = length)
因为列表中不存在行和列,所以不需要有margin参数,返回的结果值是一个列表
tapply()函数用于处理因子数据,根据因子来分组,然后根据分组来处理
以state.name和state.division为例,state.division作为因子数据进行分组:
计算每个类型区中州的数量
tapply(state.name,state.division,FUN = length)
接下来是数据的中心化与标准化处理(为了消除数据量纲对数据的影响),以state.x77数据为例:
数据的中心化,是指数据集中的各项数据减去数据集的均值
数据的标准化,是指在中心化之后再除以数据集的标准差,即数据集汇总的各项数据减去数据集的均值再除以数据集的标准差
在R中可以直接使用scale()函数进行中心化和标准化的处理,当scale()函数中的两个参数都为True时,就是做中心化(center=T)和标准化处理(scale=T)
scale(state.x77,center = T,scale = T)
经过中心化和标准化处理过后的数据,在绘制heatmap时会比较精确,对比性比较强。