美文网首页
数据转换

数据转换

作者: 鼓吉石 | 来源:发表于2022-01-15 11:44 被阅读0次

    数据转换的必要性

    在读取数据之后,数据分析之前就需要对数据格式转换达到承前启后的作用

    数据转换包含的内容

    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的平均值,再对平均值排序

    相关文章

      网友评论

          本文标题:数据转换

          本文链接:https://www.haomeiwen.com/subject/hhpwcrtx.html