数据转换(数据结构的转换:包括添加、删除、排序等等)

(1)关于数据框的转换

矩阵转换为数据框:

dstate.x77 <- as.data.frame(state.x77)输出FALSE#此时说明该数据不是数据框

is.data.frame(dstate.x77)返回TRUE#强制转换为数据框

数据框转换为矩阵:

as.matrix(data.frame(state.region,state.x77))

数据框中的数据类型不相同,转换为矩阵后,所有元素都变成字符串类型。

注意:不是所有数据结构都能进行转换,比如有些数据框就不能转换为向量或者因子。

(2)关于向量的转换

向量转换为矩阵:

x <- state.abb

dim(x) <- c(5,10)#此时x变成一个5行10列的矩阵

向量转换为因子:

as.factor(x)

向量转换为列表:

as.list(x)

向量转换为数据框:

data.frame(x,state.region,state.x77)

关于更多is和as的函数,可以使用methods(is)和methods(as)查看。

取子集:当数据集太多时想取固定行固定列来进行分析

(1)索引方式

who1 <- who[c(1,3,5,8),c(1:5)]#取1、3、5、8行,1到5列

who2 <- who[which(who$Continent==7),]#取Continent列=7的行

who3 <- who[which(who$CountryID>50 & who$CountryID<=100),]#取CountryID大于50且小于100的行

(2)subset函数

who4 <- subset(who,who$CountryID>50 & who$CountryID<=100)

(3)sample函数#进行有无放回的随机抽样

x <- 1:100

sample(x,60,replace=T)      #从向量x中,有放回的随机抽取60个元素

who[sample(who$CountryID,30,replace=F),]      #从数据框的CountryID中,无放回的随机抽取30个

(4)删除固定行/列

mtcars[-1:-5 ,]      #删除第1到5行

mtcars[, -1:-5]      #删除第1到5列

mtcars$mpg <- NULL      #清空mtcars中的mpg这一列

数据框的添加与合并(增加行或列)

(1)

data.frame(USArrests,state.division)

(2)cbind列合并

cbind(USArrests,state.division)

(3)rbind行合并

注:要求新的数据与原来的数据有相同的列名,否则rbind无法运行。

data1 <- head(USArrests,30)

data2 <- tail(USArrests,30)

data3 <- rbind(data1,data2)《

若data1与data2之间有重复行,不会去除重复项,data2中的重复行的行名后会加字符1。要想取非重复行,可以:

data3[!duplicated(data3), ]

或者

unique(data3)

数据框的翻转

行列翻转:mtcars1 <- t(mtcars)

序列前后翻转:women[rev(rownames(women)),]

R学习笔记六、数据转换,取子集,数据框的添加合并、翻转、排序、计算,数据的中心化与标准化_数据

修改数据框中的值

data.frame(height=women$height*2.54,weight=women$weight)

这样操作不高效,可以使用transform函数:

transform(women,height=height*2.54)      #将原height列乘以2.54

transform(women,cm=height*2.54)      #增加一个cm列

数据框的排序

在R中,和排序相关的函数主要有三个:sort、order和rank函数。

(1)sort函数

sort函数是对向量进行排序,返回值是排序后的结果向量。

sort(state.name)#默认从小到大的顺序

rev(sort(rivers))      #降序

(2)order函数

order函数也是对向量进行排序,但其返回值是排序后元素的位置,也就是索引。

order(rivers)

mtcars[order(mtcars$mpg),]        #此时返回具体数据的值而非索引,此时为升序

mtcars[order(-mtcars$mpg),]      #降序

mtcars[order(mtcars$mpg,mtcars$disp),]      #多条件排序,在符合mtcars$mpg排序的情况下,对mtcars$disp进行排序

(3)rank函数

rank函数是求秩的函数,其返回值是向量对应元素的排名。

对数据框进行数学计算

(1)

worldphones <- as.data.frame(WorldPhones)

rs <- rowSums(worldphones)      #计算行和

total <- cbind(worldphones,Total=rs)       #将总和添加到最后一列

cm <- colMeans(total)      #计算每列平均数

rbind(total,Mean=cm)        

(2)

apply(x,MARGIN,FUN)

x是数组、矩阵或数据框;MARGIN等于1代表对行进行处理,等于2代表对列进行处理;FUN代表要应用的函数。

如:

apply(WorldPhones,MARGIN=1,FUN = sum)  #对每一行求和

apply(WorldPhones,MARGIN=2,FUN = mean)   #对每一列求平均

apply(WorldPhones,MARGIN=2,FUN = Var)

apply(WorldPhones,MARGIN=2,FUN = log)

(3)其他apply系列函数

lapply(x,FUN):l代表list,x是列表,返回值是列表。

sapply(x,FUN):s代表simplify,x是列表,返回值是向量或者矩阵。

tapply(x,INDEX,FUN):x是向量或其他,INDEX是一组因子,利用这个因子,可以对第一个参数的数据进行分组。

数据的中心化与标准化

数据中心化:是指数据集中的各项数据减去数据集的均值。

数据标准化:是指在中心化之后再除以数据集的标准差,即数据集中的各项数据减去数据集的均值再除以数据集的标准差。

简单来看:

x <- c(1,2,3,6,3)

中心化:x-mean(x)

标准化:(x-mean(x))/sd(x)

R中实现数据中心化和标准化可以使用scale函数:

scale(x,center,scale):center为TRUE就是做中心化处理,scale为TRUE(scale=T)就是做标准化处理。