R语言数据处理常用功能以及实现

在数据分析中,数据整理需要一些步骤,将长剑的数据整理需要的功能整理一下,并给出相应的代码,便于以后数据处理的参考和回忆

数据整合

01.拼接:

cbind--横向追加
            cbind  将参数按列合并,
            使用前保证参数的行数相同--如不相同也不报错--自动填补-注意!!!
            比较耗时--循环中注意
rbind--纵向追加
merge
具体解释:
        merge(x, y, by = intersect(names(x), names(y)), by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
                sort = TRUE, suffixes = c(".x",".y"),incomparables = NULL, ...)
         单变量匹配:
                    类似sql里面的inner join 功能,则用代码
                            m1 <- merge(authors, books, by.x = "surname", by.y = "name")
                    left join功能则用代码
                            m1 <- merge(authors, books, by.x = "surname", by.y = "name",all.x=TRUE)
                    right join功能代码
                            m1 <- merge(authors, books, by.x = "surname", by.y = "name",all.y=TRUE)
                    all join功能代码
                            m1 <- merge(authors, books, by.x = "surname", by.y = "name",all=TRUE)
            多变量匹配
                    merge(x, y, by = c("k1","k2"))

02.抽取-筛选--移除:

001.行抽取--位置索引--条件索引
    any() -----------all()
    which

            ##空值-空值-缺失值
                        ###数据查看--识别是否有空值--因为来自其他数据源,所以对空值的检查和只在R语言中的有所不同
                        ##########哪些变量有缺失值,数目是多少,什么样的组合形式
                        ##########缺失数据所占比例多大,集中在哪些变量中或者是广泛存在的?
                        ##########是随机产生的吗?缺失数据间的相关性以及与可观测数据间的相关性,是够可以表明产生缺失的机制
                        which(is.na(Data$数目))       ##识别缺失值
                        which(is.nan(Data$数目))      ##识别不可能值
                        which(is.null(Data$数目))
                        which(is.infinite(Data$数目))  ##识别无穷值 Inf  和-Inf
                        which(Data$数目=="NULL")
                        which(Data$数目=="null")
       抽样          软件包                                      函数                  函数意义
                        base(无需加载,默认含有)     sample()            简单随机抽样
                        sampling(需下载)                       stratr()                分层抽样
                                                                        cluster()           整群抽样    
                        简单随机抽样
                            sample(x, size, replace = FALSE, prob =NULL)
                                    x: 带抽取对象
                                    size: 想要抽取的样本数量
                                    replace: 是否为有放回,默认为FALSE,即无放回
                                    prob: 设置个抽取样本的抽样概率,默认为无取值,即等概率抽样
                        分层抽样
                            strata(data, stratanames=NULL, size, method=c   
                             ("srswor","srswr","poisson","systematic"),pik,description=FALSE)
                                    data: 带抽样数据
                                    stratanames: 进行分层所依据的变量名称
                                    size: 各层中要抽出的观测样本数
                                    method: 选择4中抽样方法,分别为无放回、有放回、泊松、系统抽样,默认为srswor
                                    pik: 设置各层中样本的抽样概率
                                    description: 选择是否输出含有各层基本信息的结果
                                install.packages("sampling")
                                library(sampling)
                                train_sub <-  strata(featureData, stratanames=" Y.i.",size=c(1,2),method="srswor")                                  
002.列抽取-名称索引--位置索引--条件索引
        subset --可用于行以及列---条件查询<对列中数据进行逻辑判断>+指定显示列<选定列或者移除列>
            subset(x, subset, select, drop = FALSE, ...)
                subset(data01, Temp > 80, select = c(Ozone, Temp))
        match()----

003.集合运算
                union
                 intersect(as.vector(agroup[,1]),as.vector(as.matrix(anumbers)))
                 setdiff(as.vector(as.matrix(anumbers)),as.vector(agroup[,1]))
                 setdiff(as.vector(agroup[,1]),as.vector(as.matrix(anumbers)))
                 setequal( , ) 检验集合是否相等

数据填充

    ##vector创建空的向量创建--填充--添加--移除
    a <- c()
    vec <- rep(1:3,2)  ##冒号运算符,重复次数
    append(vec,seq(2,33,2))
    tt <- append(vec,seq(1,32,2))
    seq(from=1,to=5,by=2)  ##序列sequence  ==区分separate

    ##matrix-创建空的矩阵--创建--填充--添加--移除
    ##数组
    ##具有维度属性-dim()
    tt3 <-  matrix(vec,2,3)  ##两行三列
    matrix(vec,2,3,byrow = TRUE)  #默认是按行填充
    matrix(vec,2,3,byrow = FALSE) #按列填充          
    tt3[,1,drop=T]
    tt3[,1,drop=F]
    array()

    ##data.frame-创建空的数据框--创建--填充--添加--移除
    dfr <-  data.frame(tt,tt2,stringsAsFactors = F)
    dfr
    na.omit(dfr)
    str(dfr[,1])
    str(dfr[,1,drop=FALSE])
    str(dfr[,2])
    str(dfr[,2,drop=FALSE])
    ##在提取dataframe的行或者列的时候,通过设置,
    ##drop=FALSE可以放置提取的行或者列变为向量结构,保持dataframe结果。
    #data.frame(colname1 =numeric(n), colname2 = character(n))
    数据框删除一列
        data$det <- NULL 或者采取 subset(data,select =(-det)),删除两列subset(data,select =c(-det,-det2))

    ##list-列表----创建--填充--添加--移除
    ##创建空列表,然后对列表进行数据添加
    a <- rep(0:9)
    K <- length(a)
    lst <- list(NULL)
    length(lst) <- 2*(K-1)              
    i <- 1
    j <- 1
    repeat{ 
            lst[[j]] <- c(a[0:i])
            lst[[j+1]] <- c(a[i+1:(K-i)])
            i <- i+1
            j <- j+2
            if(i> K-1) break
        }
    ##关联名称和值--类似于Python中的dict 以及Scala中的hash

     lst[[18]]   <- NULL
     lst[sapply(lst,is.null)] <- NULL

     ##factor因子--用于分组
    tt2 <- as.factor(append(vec,seq(2,33,2)) )
    levels(tt2)
    labels(tt2)
     ## array--数组
    ## table---表
            contingency table 列联表
            table--第一个参数是因子或者因子的列表
                     ·········数据参数

数据变换

数据基本类型变换
        从计算机角度:
                    正常数据:
                            character    integer   double logic  complex
                            as.numeric()   as.double()
                    其他数据: Inf
        从数学角度
                    定性和定量
                            定性数据:定类<Nominal> categorical
                                                    定序<ordinal>
                            定量数据:
                                    定距--区间<interval>  :定距尺度中没有绝对零点
                                    定比--比率<ratio>
                    离散和连续:

                    计数属性是离散数据--定比数据
        变换:
                数据-取整、有效数字、四舍五入、科学计数法
            连续数据离散化
                连续数据离散化--分箱技术
                 ##分组的目的是显示数据的变异性--cut(数据源,分段向量)-把数值型对象分区间转换为因子
                    #ageFactor <- cut(as.numeric(agefre$age),c(0,15,24,32,40,48,56,64,72,Inf))
            变量标注和值标注

数据结构变换:
    as.data.frame()
    data.frame()
        向量--同质--name属性,length()
        矩阵比向量多了两个属性--行数和列数--dim属性<nrow,ncol>,禁止自动减少降维drop=FALSE
        数据框比矩阵--列的属性可以不同,clonames属性 
        列表比数据框--
        列表--[ ][[ ]]
        移除变量属性 attributes() <- NULL

数据形式变换
        因子:
                    改变因子水平的顺序-
                            --因子的顺序通过levels参数指定
                                factor(datafactor,level=c('b','c','a'))
                            ---根据数据的值改变因子水平的顺序
                                reorder()
                  改变因子水平的名称
                            --levels(datafactor) <- list(small='b',big='c',media='a')
                    去掉因子不再使用的水平
                            --droplevels()
                    把一个分类变量转化成另外一个分类变量
                            --match()
                                oldval <-
                                newcal <-  factor(c('aa,'cc','bb'))
                        newcal[match(datafactor$let,oldval)]    
                    多个因子的组合
                            expand.grid(f,g)  水平的所有组合-即其笛卡尔积

        数据框--
                重排数据框的列
                长数据框--短数据框
        按照分组转化数据--分组汇总
                plyr包---ddply()
                summarise()
    数据处理
        Z-score标准化方法-原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1
        x*=(x-均值)/标准差
        scale(x)=scale(x,center=T,scale=T),默认设置-代表中心化后标准化  
        对数据进行中心化预处理,这样做的目的是要增加基向量的正交性。
        对数据归一化的目的是消除特征之间的差异性。便于对一心一意学习权重

附录:

条件过滤---逻辑运算 和关系运算--得出的值是布尔向量<逻辑值向量>
                    关系运算符< 比较运算符>       >   >=  !=    ==   
                    逻辑运算      !    &   |
                             &&    短路与
                             ||     短路或
选择适合的索引技术--
                    名称索引--   $  @
                    位置索引--下标索引,向量索引 [  [[
                    条件索引----
                    索引前加负号  或者加!
字符串和日期时间
        paste 连接字符串
        字符的所有组合 outer
        使用outer和paste 生成所有组合
编程使用
    建议尽可能的使用名称索引,而避免使用数字缩影
    名称索引使代码更加易懂,尤其是在和其他人合作或者完成代码很长时间再过来看的时候
    代码也不容易因为数据框行和列的增减而得不到原先的结果。

参考:

    R语言merge函数总结 http://bbs.pinggu.org/thread-3234639-1-1.html

blogroll

social