• R语言实战(二)数据管理


    本文对应《R语言实战》第4章:基本数据管理;第5章:高级数据管理

    创建新变量

    #建议采用transform()函数
    mydata <- transform(mydata,
    sumx = x1 + x2,
    meanx = (x1 + x2)/2)
    

      

    算术运算符

    +

    -

    *

    /

    **或^

    求幂

    x%%y

    求余(x mod y)。5%%2的结果为1

    x%/%y

    整数除法。5%/%2的结果为2

    重编码 

    小于

    <=

    小于或等于

    大于

    >=

    大于或等于

    ==

    严格等于(比较浮点类型时慎用,易误判)

    !=

    不等于

    !x

    非x

    x | y

    x或y

    x & y

    x和y

    isTRUE(x)

    x是否为TRUE

    #较为直观
    leadership$agecat[leadership$age > 75] <- “Elder”
    leadership$agecat[leadership$age >= 55 &
    leadership$age <= 75] <- “Middle”
    leadership$agecat[leadership$age < 55] <- “Young”
    
    #或者
    leadership <- within(leadership, {
                                      agecat <- NA
                                      agecat[age > 75] <- “Elder”
                                      agecat[age >= 55 & age <= 75] <- “Middle”
                                      agecat[age < 55] <- “Young”
                                      })
    

      


    重命名 

    #交互式编辑器编辑变量名
    fix(leadership)
    #reshape包函数rename()
    library(reshape)
    leadership <- rename(leadership, c(manager = “managerID”, date = “testDate”))
    #names()函数
    names(leadership)[6:10] <- c(“item1”, “item2”, “item3”, “item4”, “item5”)
    

      


    缺失值 

    缺失值NA(Not Available)不可能出现的值NaN(Not a Number)

    #缺失值判定,返回同等大小对象,内容为TRUE或FALSE
    is.na(object)
    #缺失值无法比较,不能使用 ”==” 判断
    

      


     异常值可以重编码为缺失值;分析中排除缺失值可以使用na.omit()函数。

    日期值

    as.Date(x, “input_format”)

    x为日期向量,”input_format”为输入格式

    %d

    数字表示的日期

    01~31

    %a

    缩写的星期名

    Mon

    %A

    非缩写的星期名

    Monday

    %m

    数字表示的月份

    00~12

    %b

    缩写的月份

    Jan

    %B

    非缩写的月份

    January

    %y

    两位数的年份

    07

    %Y

    四位数的年份

    2007

    #示例
    strDates <- c(“01/05/1965”, “08/16/1975”)
    dates <- as.Date(strDates, “%m/%d/%Y”)
    

      


    提示,也可以将日期转换为字符型变量,继续进行字符串的处理 

    其他日期处理相关的包:lubridate, fCalendar

    类型转换

    is.numeric()

    as.numeric()

    is.character()

    as.character()

    is.vector()

    as.vector

    is.matrix()

    as.matrix()

    is.data.frame()

    as.data.frame()

    is.factor()

    as.factor

    is.logical()

    as.logical()

     

    数据排序

    order()函数,默认升序

    #order()函数示例
    newdata <- leadership[order(leadership$gender, -leadership$age), ]
    #依性别升序和年龄降序排列
    

      


    数据集合并 

    添加行:

    rbind()函数

    total <- rbind(dataframeA, dataframeB)
    

      

    两个数据框中必须要有相同的变量,顺序可以不相同

    如果变量不一致,需要提前处理:删除多余变量;或者追加缺失值

    添加列:

    不指定公共索引时,可以使用cbind()

    指定索引,使用merge()

     

    数据集取子集

    一般情况下,可以采用如下代码

    newdata <- dataframe[row_indices, colomn_indices]
    

      

    变量(列)

    #保留变量方式:
    
    #指明具体列的序号
    newdata <- leadership[, c(6:10)]
    #指明列名称
    myvars <- c(“q1”, “q2”, “q3”, “q4”, “q5”)
    newdata <- leadership[myvars]
    
    #剔除变量方式:
    
    #指明序号,使用负号剔除
    newdata <- leadership[c(-8, -9)]
    #设为未定义(NULL)
    leadership$q3 <- leadership$q4 <- NULL
    #指明列名称
    myvars <- names(leadership) %in% c(“q3”, “q4”)
    newdata <- leadership[!myvars]
    #解释:names()函数生成包含所有变量名的字符型向量
    # %in%将后面的向量以前面的向量为准进行匹配,返回布尔型向量
    #翻转后即可实现向量匹配
    

      


    观测(行) 

    #指明行序号
    newdata <- leadership[1:3, ]
    #条件筛选
    newdata <- leadership[which(leadership$gender == “M”), ]
    

      


    subset()函数 

    #两个例子
    newdata <- subset(leadership, age >= 35 | age < 24, select = c(q1, q2, q3, q4))
    
    newdata <- subset(leadership, gender == “M” & age > 25, select = gender : q4)
    

      


    随机抽样 

    mysample <- leadership[sample(1:nrow(leadership), 3, replace = FALSE), ]
    

      


    更多抽样方法将在后面作详细介绍 

     

    SQL语句操作数据框

    package sqldf

     

     

    数值和字符处理

    数学函数

    abs(x)

    绝对值

    sqrt(x)

    平方根

    ceiling(x)

    向上取整

    floor(x)

    向下取整

    trunc(x)

    向0取整

    round(x, digits = n)

    将x舍入为指定位小数

    signif(x, digits = n)

    将x舍入为指定位有效数字

    cos(x), sin(x), tan(x)

    余弦正弦正切

    acos(x), asin(x), atan(x)

    反余弦反正弦反正切

    cosh(x), sinh(x), tanh(x)

    双曲余弦双曲正弦双曲正切

    acosh(x), asinh(x), atanh(x)

    反双曲余弦反双曲正弦反双曲正切

    exp(x)

    自然为底的指数函数

    log(x, base = n)

    log(x)

    log10(x)

    n为底的对数

    log(x)为自然对数

    log10(x)为常用对数

     

    统计函数

    mean(x)

    平均数(声明里trim = 0.05表示丢弃最大最小的5%数据后的平均数)

    median(x)

    中位数

    sd(x)

    标准差

    var(x)

    方差

    mad(x)

    绝对中位数

    quantile(x, probs)

    分位数

    range(x)

    值域

    sum(x)

    求和

    diff(x, lag = n)

    滞后差分,lag指定滞后几项,默认1

    x <- c(1, 5, 23, 29)

    diff(x)返回c(4, 18, 6)

    min(x)

    最小值

    max(x)

    最大值

    scale(x, center = TRUE, scale = TRUE)

    为数据对象x按列进行中心化(center = TRUE)或标准化(center = TRUE, scale = TRUE)

     

    关于scale()函数的说明:

    默认情况下,该函数对矩阵或数据框的指定列进行均值为0,方差为1的标准化:

    newdata <- scale(mydata)
    

      

    要进行指定均值和方差,使用以下语句

    newdata <- scale(mydata) * SD + M
    

      

    对指定列进行标准化:

    newdata <- transform(mydata, myvar = scale(myvar) * SD + M)
    

      

     

    概率函数

    形如

    [dpqr]分布缩写

    d = 密度函数(density)

    p = 分布函数(distribution function)

    q = 分位数函数(quantile function)

    r = 生成随机数(随机偏差)

    分布名称

    缩写

    分布名称

    缩写

    Beta分布

    beta

    Logistic分布

    logis

    二项分布

    binom

    多项分布

    multinom

    柯西分布

    cauchy

    负二项分布

    nbinom

    (非中心)卡方分布

    chisq

    正态分布

    norm

    指数分布

    exp

    泊松分布

    pois

    F分布

    f

    Wilcoxon符号秩分布

    signrank

    Gamma分布

    gamma

    t分布

    t

    几何分布

    geom

    均匀分布

    unif

    超几何分布

    hyper

    Weibull分布

    weibull

    对数正态分布

    lnorm

    Wilcoxon秩和分布

    wilcox

     

    如密度函数dnorm, 分布函数pnorm, 分位数函数qnorm, 随机数生成函数rnorm

    设定随机数种子:使结果可以复现

    set.seed(n)
    

      

    生成多元正态数据:给定均值向量和协方差矩阵的数据集

    library(MASS)
    mvrnorm(n, mean, sigma)
    

      

     

    字符处理函数

    nchar(x)

    计算x中字符数量

    substr(x, start, stop)

    提取或替换一个字符向量中的子串

    substr(“abcdef”, 2, 4)#返回”bcd”

    (substr(“abcdef”, 2, 4) <- “22222”)#返回”a222ef”

    grep(pattern, x, ignore.case = FALSE, fixed = FALSE)

    在x中搜索某种模式。fixed = FALSE, pattern为正则表达式,fixed = TRUE, pattern为文本字符串

    返回值为匹配的下标

    sub(pattern, replacement, x, ignore.case = FALSE, fixed = FALSE)

    在x中搜索pattern, 并用replacement替换

    strsplit(x, split, fixed = FALSE)

    在split处分割x

    paste(… , sep = “”)

    连接字符串,分隔符为sep

    toupper(x)

    大写转换

    tolower(x)

    小写转换

     

    函数grep(), sub()和strsplit()能够搜索文本字符串(fixed = TRUE)或者正则表达式(fixed = FALSE, 默认值)

    正则表达式用法,参考https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

     

    其他实用函数

    length(x)

    返回对象x的长度

    seq(from, to, by)

    生成一个序列

    seq(1, 10, 2)#c(1, 3, 5, 7, 9)

    rep(x, n)

    将x重复n次

    cut(x, n)

    将连续型变量x分割为有着n个水平的因子

    pretty(x, n)

    创建美观的分割点。选取n+1个点,将x分割为n个区间,绘图常用

    cat(…, file = “myfile”, append = FALSE)

    连接…中的对象,并将其输出到屏幕上或文件中

     

    将函数应用于矩阵和数据框

    apply族函数,详细应用方式在另一本书中,到时补充吧

    一般用法:

    apply(x, MARGIN, FUN, …)

    MARGIN = 1 表示应用到行,MARGIN = 2表示应用到列

     

    控制流

    循环:

    for (var in seq) statement

    while (cond) statement

     

    只要可能,尽量应用apply族函数,避免循环语句

     

    条件执行:

    #if-else结构
    if (cond) statement1 else statement2
    
    #ifelse结构:程序行为是二元或输入输出均为向量,尽量使用本结构
    ifelse(cond, statement1, statement2)
    
    #switch结构
    switch(expr, …)
    

      


    自编函数 

    自编函数的一些注意事项,在Google’s R Style Guide (https://google.github.io/styleguide/Rguide.xml) 中提到,详情可直接参考网页

     

    整合与重构

    转置

    #对矩阵或数据框进行转置
    t()
    

      


    整合数据 

    使用一个或多个变量,一个预先定义好的函数,对数据进行折叠(collapse)

    aggregate(x, by, FUN)

    #示例
    attach(mtcars)
    aggdata <- aggregate(mtcars, by = list(cyl, gear), FUN = mean, na.rm = TRUE)
    #返回根据cyl, gear为组合的组为观测,各个变量的均值
    

      


    reshape包(reshape2包) 

    融合与重铸

    #融合,使每一行都是一个唯一的标识符-变量组合
    library(reshape)
    md <- melt(mydata, id = (c(“id”, “time”)))
    
    #重铸
    newdata <- cast(md, formula, FUN)
    #formula形式:rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + …
    #左边为观测分组(行),右边为变量分组(列)
    

      


      

  • 相关阅读:
    数据库基础+重置root密码
    Bug定级
    测试用例和测试方法
    测试基础
    HDOJ-1010 Tempter of the Bone(dfs)
    POJ
    HDU-2089 不要62 (数位DP)
    Happy!
    LOJ-1422 万圣节服装
    数字三角形(数塔问题)
  • 原文地址:https://www.cnblogs.com/gyjerry/p/6218445.html
Copyright © 2020-2023  润新知