R提高篇(四): 数据管理二

目录:

  • 数学函数
  • 统计函数
  • 应用示例
  • 控制流

数学函数


  • ceiling(x):  大于等于 x  的最小整数, 如:  ceiling(3.213)  --> 4
  • floor(x):     小于等于 x 的最大整数,如:  floor(3.6534) --> 3
  • trunc(x):    取x的整数部分,          如:  trunc(5.999)  --> 5
  • round(x,digits=n):   将x舍入为指定的小数,                       如: round(3.4567,2)  --> 3.46
  • signif(x,digits=n):  将x舍入为指定的有效数字位数              如:  signif(3.4567,2)  --> 3.5

统计函数


  • mean(x):  平均数,语法: mean(x, trim = 0, na.rm = FALSE, ...)
    1. trim:  (0 to 0.5),  如:mean(x, trim = 0.1), 表示先把x的最大的10%的数和最小的10%的数去掉,然后剩下的数算平均
    2. 示例代码

       x <- c(2,4,6,8,10,11)
       mean(x,trim = 0.2)   #6*0.2=1.2(取整),除去最大最小值11、2 ,实际计算 4 6 8 10的平均 --> 7
       mean(x)              # 41/6  --> 6.833
  • median(x) : 中位数,语法: median(x, na.rm = FALSE) ,从小到大或是从大到小排列时最中间的那个或是最中间两个数的平均值,主要用于算一个整体(小组)的一般水平...

    > x <- c(2,4,6,9,10,11)
    >  median(x)
    [1] 7.5
    >  x <- c(2,4,9,10,11)
    >  median(x)
    [1] 9
  • med(x): 绝对中位数,语法:mad(x, center = median(x), constant = 1.4826, na.rm = FALSE,low = FALSE, high = FALSE)
    1. 主要是考虑到数据列中一些与均值相差较远的离谱数据在求均值和方差时候,尤其是求方差时对结果产生较大的影响
    2. 实际上计算mad的过程就是:constant * cMedian(abs(x - center))
    3. low,high: 当中位数是两个数字时,根据设置的参数取最小或最大的值
    4. 示例代码

      > x <- c(1,2,3,5,7,8)
      > mad(x)
      [1] 3.7065
      > #分解mad(x)计算过程
      > y <- abs(x - median(x));y
      [1] 3 2 1 1 3 4
      > z <- median(y);z
      [1] 2.5
      > 1.4826 * z
      [1] 3.7065
  • rang(x): 求值域, 语法:range(..., na.rm = FALSE)

    > x <- c(1,2,3,5,7,8)
    > y <- range(x);y
    [1] 1 8
    > diff(y)   #滞后差分
    [1] 7
  • sd(x): 标准差,语法:sd(x, na.rm = FALSE), 标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值
    1. 标准差也被称为标准偏差,或者实验标准差,公式为

      ,  ,

    2. 公式意义:所有数减去其平均值的平方和,所得结果除以该组数之个数减一 (上面的公式有误),再把所得值开根号,所得之数就是这组数据的标准差
    3. 标准差应用于投资上,可作为量度回报稳定性的指标。标准差数值越大,代表回报远离过去平均数值,回报较不稳定故风险越高。相反,标准差数值越小,代表回报较为稳定,风险亦较小
    4. 代码示例:

      > x <- c(1,2,3,4)
      > sd(x)
      [1] 1.290994
      > m <- mean(x);
      > y <- sum((x - m)^2)/(length(x) -1)
      > sqrt(y)
      [1] 1.290994
  • scale(x): 为数据对象x按列进行中心化或标准化,语法:scale(x, center = TRUE, scale = TRUE)
    1. 数据的中心化是指数据集中的各项数据减去数据集的均值
    2. 标准化是指中心化之后的数据在除以数据集的标准差
    3. 示例代码:

      > data <- c(1, 2, 3, 6, 3)
      > scale(data)
                 [,1]
      [1,] -1.0690450
      [2,] -0.5345225
      [3,]  0.0000000
      [4,]  1.6035675
      [5,]  0.0000000
      attr(,"scaled:center")
      [1] 3
      attr(,"scaled:scale")
      [1] 1.870829
  • quantile(x): 求百分位数,语法:quantile(x, probs = seq(0, 1, 0.25), na.rm = FALSE, names = TRUE,...)
    1. 默认计算方法:要计算的点到起始点的距离/终点到起始点的距离=要计算的比例
    2. 示例代码:

      > m <- c(1:20)
      > quantile(m,probs = c(0.25,0.75,1));
        25%   75%  100%
       5.75 15.25 20.00
      > (20 -1)*0.25 + 1
      [1] 5.75

 应用示例


  • 根据如下表格中的数据,按成绩对学生进行ABCDEF分等级,最后按姓氏和名字进行排序输出
  • 示例数据如下,保存本地 student.rda 文件中
  • 第一步: 同于三门学科分值相差甚远,首选必须将变量进行标准化,让数据变得可比较, 每科成绩用单位标准差表示,如下

    > setwd("E:\\R")
    > load(file = "roster.rda")
    > options(digits = 2)  #小数点后保留2位
    > z <- scale(roster[,2:4])
    > z
         math science english
    1   0.013   1.078   0.587
    2   1.143   1.591   0.037
    3  -1.026  -0.847  -0.697
    4  -1.649  -0.590  -1.247
    5  -0.068  -1.489  -0.330
    6   0.128  -0.205   1.137
    7  -1.049  -0.847  -1.247
    8   1.432   1.078   1.504
    9   0.832   0.308   0.954
    10  0.243  -0.077  -0.697
  • 第二步:计算每行的平均得分获得综合得分,合并到花名册,如下:
    > score <- apply(z,MARGIN = 1,FUN = mean);
    > score
        1     2     3     4     5     6     7     8     9    10
     0.56  0.92 -0.86 -1.16 -0.63  0.35 -1.05  1.34  0.70 -0.18
    > roster <- cbind(roster,score);roster
                student math science english score
    1        John Davis  502      95      25  0.56
    2    Angla Williams  600      99      22  0.92
    3  Bullwinkle Moose  412      80      18 -0.86
    4       David Jones  358      82      15 -1.16
    5  Janice Makhammer  495      75      20 -0.63
    6    Cheryl Cushing  512      85      28  0.35
    7    Reuven Ytzrhak  410      80      15 -1.05
    8         Greg Knox  625      95      30  1.34
    9      Joel England  573      89      27  0.70
    10     Mary Rayburn  522      86      18 -0.18
  • 第三步:按百分位数进行等级划分,如下:
    > y <- quantile(roster$score,probs = c(0.8,0.6,0.4,0.2))
    > y
      80%   60%   40%   20%
     0.74  0.44 -0.36 -0.89
    > roster <- within(roster,{
    +                   grader <- NA
    +                   grader[score >= y[1]] <- "A"
    +                   grader[score < y[1] & score >= y[2]] <- "B"
    +                   grader[score < y[2] & score >= y[3]] <- "C"
    +                   grader[score < y[3] & score >= y[4]] <- "D"
    +                   grader[score < y[4]] <- "E"
    + })
    > roster
                student math science english score grader
    1        John Davis  502      95      25  0.56      B
    2    Angla Williams  600      99      22  0.92      A
    3  Bullwinkle Moose  412      80      18 -0.86      D
    4       David Jones  358      82      15 -1.16      E
    5  Janice Makhammer  495      75      20 -0.63      D
    6    Cheryl Cushing  512      85      28  0.35      C
    7    Reuven Ytzrhak  410      80      15 -1.05      E
    8         Greg Knox  625      95      30  1.34      A
    9      Joel England  573      89      27  0.70      B
    10     Mary Rayburn  522      86      18 -0.18      C
  • 第四步: 将student变量拆分为firstname 和 lastname ,并按姓氏和名称排序,将结果保存为本地文件 studentGrade.rda
    > name  <- strsplit(roster$student," ")
    Error in strsplit(roster$student, " ") : non-character argument
    > class(roster$student)   #查看student类型,是因子,必须转化成字符
    [1] "factor"
  • 正确代码如下:
    >  name  <- strsplit(as.character(roster$student)," ")
    >  firstname <- sapply(name,"[",1)  # "[" 是一个可以提取某个对象一部分的函数,在这里用来提取列表中name各成份中的第一或二个元素
    >  lastname <- sapply(name,"[",2)
    >  sGrade <- cbind(firstname,lastname,roster[,-1])
    >  sGrade[order(sGrade$lastname),]
        firstname  lastname math science english      score grader
    6      Cheryl   Cushing  512      85      28  0.3532485      C
    1        John     Davis  502      95      25  0.5592028      B
    9        Joel   England  573      89      27  0.6978361      B
    4       David     Jones  358      82      15 -1.1620473      E
    8        Greg      Knox  625      95      30  1.3378934      A
    5      Janice Makhammer  495      75      20 -0.6289776      D
    3  Bullwinkle     Moose  412      80      18 -0.8565414      D
    10       Mary   Rayburn  522      86      18 -0.1768163      C
    2       Angla  Williams  600      99      22  0.9238259      A
    7      Reuven   Ytzrhak  410      80      15 -1.0476242      E
    >  save(sGrade,file = "studentGrade.rda")

控制流


  • for :  示例: for(i in 1:10) print("hello")
  • while:     示例:

     i<-10
     while (i>0)
     {
       print("hello")
       i <- i-1
     }
  • ifelse:  语法: ifelse(cond,statement1,statement2) , 当 cond = true 时执行第一个语句,反之执行第二个
  • swith:  语法: switch(expression, case1, case2, case3....)

    x <- switch(
      3,
      "first",
      "second",
      "third",
      "fourth"
    )
    x
时间: 2024-10-08 22:23:42

R提高篇(四): 数据管理二的相关文章

R提高篇(三): 数据管理一

目录: 创建新变量 变量重编码 日期值 数据排序 数据集合并 数据子集 随机取样 创建新变量 算术运算函数:x%%y [求余 x mod y,  5%%2的结果为1], x%/%y  [整数除法,5% / %2 结果为2], ^或 ** 求幂 如下示例数据,在对象中增加平均.合计变量(场景不大合适,主要为了说明问题) 有多种方式来实现新增变量的处理,推荐使用 transform 示例代码如下: > mydata <- transform(mydata,avg = (age + weight)/

java提高篇(四)_理解java的三大特性之多态 转自 http://cmsblogs.com

多态就是指程序中定义 的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该 引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定.因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让 引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个 运行状态,这就是多态性 一. 向上转型

Java提高篇(三二)-----List总结

前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点能够对List接口有了比較深的了解了.仅仅有通过归纳总结的知识才是你的知识.所以以下LZ就List接口做一个总结.推荐阅读: java提高篇(二一)-----ArrayList java提高篇(二二)-----LinkedList java提高篇(二九)-----Vector Java提高篇(三一)-----Stack 一.List接口概述 List接口,成

R提高篇(五): 描述性统计分析

数据作为信息的载体,要分析数据中包含的主要信息,即要分析数据的主要特征(即数据的数字特征), 对于数据的数字特征, 包含数据的集中位置.分散程度和数据分布,常用统计项目如下: 集中趋势统计量:  均值(Mean).中位数(Median).众数(Mode).百分位数 离散趋势统计量:标准差(sd).方差(var).极差(range).变异系数(CV).标准误.样本校正平方和(CSS).样本未校正平方和(USS) 分布情况统计量:偏度.峰度 示例函数 集中趋势 均值(mean):描述数据取值的平均位

java提高篇(四)-----理解java的三大特性之多态

转载  http://www.cnblogs.com/chenssy/p/3372798.html 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承是为了重用父类代码.两个类若存在IS-A的关系就可以使用继承.,同时继承也为实现多态做了铺垫.那么什么是多态呢?多态的实现机制又是什么?请看我一一为你揭开: 所谓多态就是指程序中定义的引用变量所指向的

Maven提高篇系列之(四)——使用Profile

这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) Maven提高篇系列之(三)——使用自己Repository(Nexus) Maven提高篇系列之(四)——使用Profile Maven提高篇系列之(五)——处理依赖冲突 Maven提高篇系列之(六)——编写自己的Plugin(本系列完) 在开发项目时,设想有以下场景: 你的Maven项目存放在

Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例)

这是一个Maven提高篇的系列,包含有以下文章: Maven提高篇系列之(一)——多模块 vs 继承 Maven提高篇系列之(二)——配置Plugin到某个Phase(以Selenium集成测试为例) Maven提高篇系列之(三)——使用自己Repository(Nexus) Maven提高篇系列之(四)——使用Profile Maven提高篇系列之(五)——处理依赖冲突 Maven提高篇系列之(六)——编写自己的Plugin(本系列完) 持续交付要“自动化所有东西”,对于集成测试也是一样.集成

java提高篇(二九)-----Vector

在java提高篇(二一)-–ArrayList.java提高篇(二二)-LinkedList,详细讲解了ArrayList.linkedList的原理和实现过程,对于List接口这里还介绍一个它的实现类Vector,Vector 类可以实现可增长的对象数组. 一.Vector简介 Vector可以实现可增长的对象数组.与数组一样,它包含可以使用整数索引进行访问的组件.不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删除操作. Vector实现List接口,继承

Java提高篇(三二)-----List总结

前面LZ已经充分介绍了有关于List接口的大部分知识,如ArrayList.LinkedList.Vector.Stack,通过这几个知识点可以对List接口有了比较深的了解了.只有通过归纳总结的知识才是你的知识.所以下面LZ就List接口做一个总结.推荐阅读: java提高篇(二一)-----ArrayList java提高篇(二二)-----LinkedList java提高篇(二九)-----Vector Java提高篇(三一)-----Stack 一.List接口概述 List接口,成为