数据转换的必要性
在读取数据之后,数据分析之前就需要对数据格式转换达到承前启后的作用
数据转换包含的内容
1.数据结构的变化:添加,删除,修改,筛选,排序。。。
> cars32 <- read.xlsx("C:/Users/RNG/Desktop/RData/mtcars.xlsx",sheet = 1)#读取一个数据
> class(cars32)#检查该数据格式
> class(state.x77)#检测数据格式发现是矩阵
[1] "matrix" "array"
> dstate.x77 <- as.data.frame(state.x77)#强制将矩阵转换为数据框
> class(dstate.x77)
[1] "data.frame"
如何取子集
> who <- read.csv("C:/Users/RNG/Desktop/RData/WHO.csv",header = T)#读取数据文件
#取子集方法1:
> who1 <- who[c(1:50),c(1:10)]#取前50行10列
#方法2:使用逻辑判断
> who3 <- who[which(who$Continent==7)]#使用which函数判断只取contient=7的子集
#方法3:使用sample函数随机抽样
> sample(x,60,replace = T)#x为所抽取目标,60为想抽取个数,replace为是否有放回,默认为不放回
> who[sample(who$CountryID,30,replace = F),]#利用sample在数据框中随机取子集
如何删除内容
> mtcars[c(-1:-5),]#删除mtcars的1-5行
数据框的添加与合并
> cbind(USArrests,state.division)#cbind表示添加列,即给usa添加一列state
> rbind(data1,data2)#将两个的行合并,但合并行的前提是必须保证列名相同
#当合并的内容有重复时:
> duplicated(data4)#使用该函数检查重复项
> data4[!duplicated(data4),]#将重复项利用!取反得出非重复项
#或者直接使用unique函数:
> unique(data4)#直接去除重复项
矩阵的转置
> sractm <- t(mtcars)#使用t函数直接转置
#数据的反置,即将某行数据前后反转:
> rev(letters)#使用rev函数之间进行前后反置
数据内容的修改
> transform(women,height=height*2.54)#使用transfrom函数进行转换,height=height*2.54即用*2.54后的height代替之前的,也可以新增一列:
> transform(women,cm=height*2.54)#新增一列cm
数据框的排序
> sort(rivers)#使用sort对向量排序
> mtcars[order(mtcars$mpg),]#使用order函数对数据框的某列排序
> mtcars[order(-mtcars$mpg),]#使用order函数对数据框进行负排序
数据的计算
> apply(WorldPhones,MARGIN = 1,FUN = sum)#使用apply函数,margin=1为对行作用,fun=sum为操作为求和
> apply(WorldPhones,MARGIN = 2,FUN = mean)#margin=2为对列作用
数据的标准化和中心化
#使用scale函数进行标准化和中心化
> scale(state.x77,center = T,scale = T)#center=T表示中心化,scale=T表示标准化
reshape2包对数据格式转换(相当于excel里的数据透视)
> library(reshanpe2)
> aql <- melt(airquality,id.vars = c("month","day"))#融合数据,id.vars=...表示把...作为观测值进行融合
> aqw <- dcast(aql,month+day~variable)#数据重铸
#dcast表示将长数据变宽数据,~表示左右两边有关联,即把左右两边的数据并列
tidyr包对数据进行转换(适用于行名没有重复,列名没有重复的数据)
> library(tidyr)
#gather函数
> gather(tdata,key = "Key",value = "Value",cyl,disp,mpg)#将原数据新加两列key和value,各自命名,cyl,disp,没碰过、表示把这三列合并到前面,如果没写则保持原状不合并
#spread函数:
> spread(gdata,key = "Key",value = "Value")#将gather函数打散的数据恢复
dplyr包
> library(dplyr)
#filter函数,用来过滤数据
> dplyr::filter(iris,iris$Sepal.Length>7)
#distinct函数,去除重复数据
> dplyr::distinct(rbind(iris[1:10,],iris[1:15,]))
#sample-n函数,随机取出几行
> dplyr::sample_n(iris,10)
#按比例随机选取
> dplyr::sample_frac(iris,0.1)
#排序函数arrange
> dplyr::arrange(iris,iris$Sepal.Length)
#添加新列的mutate函数
> dplyr::mutate(iris,new=iris$Sepal.Length+iris$Petal.Length)
链式操作符%>%
在R中CTRL+shift+M
> head(mtcars,20) %>% tail(10)#先取出数据的前20行再取前20行里的后10行
> iris %>% group_by(iris$Species) %>% summarise(avq=mean(iris$Sepal.Width)) %>% arrange(avq)
#对数据iris先按照species分组,再对分组计算width的平均值,再对平均值排序
网友评论