精华内容
下载资源
问答
  • R语言实战

    2019-07-07 02:35:44
    R语言实战》 基本信息 原书名:R in Action:Data Analysis and Graphics with R 作者: (美)Robert I. Kabacoff [作译者介绍] 译者: 高涛 肖楠 陈钢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:...

    《R语言实战》
    基本信息
    原书名:R in Action:Data Analysis and Graphics with R
    作者: (美)Robert I. Kabacoff [作译者介绍]
    译者: 高涛 肖楠 陈钢
    丛书名: 图灵程序设计丛书
    出版社:人民邮电出版社
    ISBN:9787115299901
    上架时间:2012-12-10
    出版日期:2013 年1月
    开本:16开
    页码:1
    版次:1-1
    所属分类:计算机 > 软件与程序设计 > 综合 > 高级程序语言设计

    更多关于 》》》《R语言实战
    内容简介
    书籍
       《r语言实战》注重实用性,是一本全面而细致的r 指南,高度概括了该软件和它的强大功能,展示了实用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计分析,还阐述了大量探索和展示数据的图形功能。
       《r语言实战》适合数据分析人员及r 用户学习参考。
    目录
    《r语言实战》
    第一部分  入    门
    第1章  r语言介绍  3
    1.1  为何要使用r?  4
    1.2  r的获取和安装  6
    1.3  r的使用  7
    1.3.1  新手上路  7
    1.3.2  获取帮助  10
    1.3.3  工作空间  10
    1.3.4  输入和输出  12
    1.4  包  14
    1.4.1  什么是包  14
    1.4.2  包的安装  14
    1.4.3  包的载入  14
    1.4.4  包的使用方法  15
    1.5  批处理  15
    1.6  将输出用为输入——结果的重用  16
    1.7  处理大数据集  16
    1.8  示例实践  17
    1.9  小结  18
    第2章  创建数据集  19
    2.1  数据集的概念  19
    2.2  数据结构  20
    2.2.1  向量  21
    2.2.2  矩阵  22
    2.2.3  数组  23
    2.2.4  数据框  24
    2.2.5  因子  27
    2.2.6  列表  29
    2.3  数据的输入  30
    2.3.1  使用键盘输入数据  31
    2.3.2  从带分隔符的文本文件导入数据  32
    2.3.3  导入excel数据  33
    2.3.4  导入xml数据  34
    2.3.5  从网页抓取数据  34
    2.3.6  导入spss数据  34
    2.3.7  导入sas数据  34
    2.3.8  导入stata数据  35
    2.3.9  导入netcdf数据  35
    2.3.10  导入hdf5数据  35
    2.3.11  访问数据库管理系统  36
    2.3.12  通过stat/transfer导入数据  37
    2.4  数据集的标注  37
    2.4.1  变量标签  38
    2.4.2  值标签  38
    2.5  处理数据对象的实用函数  38
    2.6  小结  39
    第3章  图形初阶  40
    3.1  使用图形  40
    3.2  一个简单的例子  42
    3.3  图形参数  43
    3.3.1  符号和线条  45
    3.3.2  颜色  46
    3.3.3  文本属性  47
    3.3.4  图形尺寸与边界尺寸  49
    3.4  添加文本、自定义坐标轴和图例  50
    3.4.1  标题  51
    3.4.2  坐标轴  52
    3.4.3  参考线  54
    3.4.4  图例  54
    3.4.5  文本标注  56
    3.5  图形的组合  58
    3.6  小结  64
    第4章  基本数据管理  65
    4.1  一个示例  65
    4.2  创建新变量  67
    4.3  变量的重编码  68
    4.4  变量的重命名  69
    4.5  缺失值  70
    4.5.1  重编码某些值为缺失值  71
    4.5.2  在分析中排除缺失值  72
    4.6  日期值  73
    4.6.1  将日期转换为字符型变量  74
    4.6.2  更进一步  74
    4.7  类型转换  74
    4.8  数据排序  75
    4.9  数据集的合并  76
    4.9.1  添加列  76
    4.9.2  添加行  76
    4.10  数据集取子集  77
    4.10.1  选入(保留)变量  77
    4.10.2  剔除(丢弃)变量  77
    4.10.3  选入观测  78
    4.10.4  subset()函数  79
    4.10.5  随机抽样  79
    4.11  使用sql语句操作数据框  80
    4.12  小结  81
    第5章  高级数据管理  82
    5.1  一个数据处理难题  82
    5.2  数值和字符处理函数  83
    5.2.1  数学函数  83
    5.2.2  统计函数  84
    5.2.3  概率函数  86
    5.2.4  字符处理函数  89
    5.2.5  其他实用函数  90
    5.2.6  将函数应用于矩阵和数据框  91
    5.3  数据处理难题的一套解决方案  93
    5.4  控制流  96
    5.4.1  重复和循环  97
    5.4.2  条件执行  97
    5.5  用户自编函数  99
    5.6  整合与重构  101
    5.6.1  转置  101
    5.6.2  整合数据  101
    5.6.3  reshape包  102
    5.7  小结  105
    第二部分  基本方法
    第6章  基本图形  108
    6.1  条形图  108
    6.1.1  简单的条形图  109
    6.1.2  堆砌条形图和分组条形图  110
    6.1.3  均值条形图  111
    6.1.4  条形图的微调  112
    6.1.5  棘状图  113
    6.2  饼图  114
    6.3  直方图  116
    6.4  核密度图  118
    6.5  箱线图  120
    6.5.1  使用并列箱线图进行跨组比较  121
    6.5.2  小提琴图  124
    6.6  点图  125
    6.7  小结  128
    第7章  基本统计分析  129
    7.1  描述性统计分析  130
    7.1.1  方法云集  130
    7.1.2  分组计算描述性统计量  133
    7.1.3  结果的可视化  136
    7.2  频数表和列联表  136
    7.2.1  生成频数表  137
    7.2.2  独立性检验  142
    7.2.3  相关性的度量  144
    7.2.4  结果的可视化  144
    7.2.5  将表转换为扁平格式  144
    7.3  相关  146
    7.3.1  相关的类型  146
    7.3.2  相关性的显著性检验  148
    7.3.3  相关关系的可视化  150
    7.4  t检验  150
    7.4.1  独立样本的t检验  150
    7.4.2  非独立样本的t检验  151
    7.4.3  多于两组的情况  152
    7.5  组间差异的非参数检验  152
    7.5.1  两组的比较  152
    7.5.2  多于两组的比较  153
    7.6  组间差异的可视化  155
    7.7  小结  155
    第三部分  中级方法
    第8章  回归  158
    8.1  回归的多面性  159
    8.1.1  ols回归的适用情境  159
    8.1.2  基础回顾  160
    8.2  ols回归  160
    8.2.1  用lm()拟合回归模型  161
    8.2.2  简单线性回归  162
    8.2.3  多项式回归  164
    8.2.4  多元线性回归  167
    8.2.5  有交互项的多元线性回归  169
    8.3  回归诊断  171
    8.3.1  标准方法  171
    8.3.2  改进的方法  175
    8.3.3  线性模型假设的综合验证  180
    8.3.4  多重共线性  181
    8.4  异常观测值  181
    8.4.1  离群点  182
    8.4.2  高杠杆值点  182
    8.4.3  强影响点  183
    8.5  改进措施  186
    8.5.1  删除观测点  186
    8.5.2  变量变换  186
    8.5.3  增删变量  187
    8.5.4  尝试其他方法  188
    8.6  选择“最佳”的回归模型  188
    8.6.1  模型比较  188
    8.6.2  变量选择  189
    8.7  深层次分析  193
    8.7.1  交叉验证  193
    8.7.2  相对重要性  194
    8.8  小结  197
    第9章  方差分析  198
    9.1  术语速成  198
    9.2  anova模型拟合  201
    9.2.1  aov()函数  201
    9.2.2  表达式中各项的顺序  201
    9.3  单因素方差分析  202
    9.3.1  多重比较  204
    9.3.2  评估检验的假设条件  206
    9.4  单因素协方差分析  208
    9.4.1  评估检验的假设条件  209
    9.4.2  结果可视化  210
    9.5  双因素方差分析  211
    9.6  重复测量方差分析  214
    9.7  多元方差分析  216
    9.7.1  评估假设检验  217
    9.7.2  稳健多元方差分析  219
    9.8  用回归来做anova  219
    9.9  小结  221
    第10章  功效分析  222
    10.1  假设检验速览  222
    10.2  用pwr包做功效分析  225
    10.2.1  t检验  225
    10.2.2  方差分析  227
    10.2.3  相关性  227
    10.2.4  线性模型  228
    10.2.5  比例检验  229
    10.2.6  卡方检验  229
    10.2.7  在新情况中选择合适的效应值  230
    10.3  绘制功效分析图形  232
    10.4  其他软件包  234
    10.5  小结  235
    第11章  中级绘图  236
    11.1  散点图  237
    11.1.1  散点图矩阵  239
    11.1.2  高密度散点图  244
    11.1.3  三维散点图  247
    11.1.4  气泡图  250
    11.2  折线图  252
    11.3  相关图  255
    11.4  马赛克图  259
    11.5  小结  261
    第12章  重抽样与自助法  263
    12.1  置换检验  263
    12.2  用coin包做置换检验  265
    12.2.1  独立两样本和k样本检验  266
    12.2.2  列联表中的独立性  267
    12.2.3  数值变量间的独立性  268
    12.2.4  两样本和k样本相关性检验  268
    12.2.5  深入探究  269
    12.3  lmperm包的置换检验  269
    12.3.1  简单回归和多项式回归  269
    12.3.2  多元回归  271
    12.3.3  单因素方差分析和协方差分析  271
    12.3.4  双因素方差分析  272
    12.4  置换检验点评  273
    12.5  自助法  273
    12.6  boot包中的自助法  274
    12.6.1  对单个统计量使用自助法  275
    12.6.2  多个统计量的自助法  277
    12.7  小结  279
    第四部分  高级方法
    第13章  广义线性模型  282
    13.1  广义线性模型和glm()函数  282
    13.1.1  glm()函数  283
    13.1.2  连用的函数  284
    13.1.3  模型拟合和回归诊断  285
    13.2  logistic回归  285
    13.2.1  解释模型参数  288
    13.2.2  评价预测变量对结果概率的影响  289
    13.2.3  过度离势  290
    13.2.4  扩展  291
    13.3  泊松回归  291
    13.3.1  解释模型参数  293
    13.3.2  过度离势  294
    13.3.3  扩展  295
    13.4  小结  297
    第14章  主成分和因子分析  298
    14.1  r中的主成分和因子分析  299
    14.2  主成分分析  300
    14.2.1  判断主成分的个数  300
    14.2.2  提取主成分  302
    14.2.3  主成分旋转  305
    14.2.4  获取主成分得分  306
    14.3  探索性因子分析  307
    14.3.1  判断需提取的公共因子数  308
    14.3.2  提取公共因子  309
    14.3.3  因子旋转  310
    14.3.4  因子得分  313
    14.3.5  其他与efa相关的包  313
    14.4  其他潜变量模型  314
    14.5  小结  314
    第15章  处理缺失数据的高级方法  316
    15.1  处理缺失值的步骤  317
    15.2  识别缺失值  318
    15.3  探索缺失值模式  319
    15.3.1  列表显示缺失值  319
    15.3.2  图形探究缺失数据  320
    15.3.3  用相关性探索缺失值  322
    15.4  理解缺失数据的来由和影响  324
    15.5  理性处理不完整数据  325
    15.6  完整实例分析(行删除)  326
    15.7  多重插补  327
    15.8  处理缺失值的其他方法  331
    15.8.1  成对删除  331
    15.8.2  简单(非随机)插补  332
    15.9  小结  332
    第16章  高级图形进阶  333
    16.1  r中的四种图形系统  333
    16.2  lattice包  334
    16.2.1  条件变量  338
    16.2.2  面板函数  339
    16.2.3  分组变量  342
    16.2.4  图形参数  345
    16.2.5  页面摆放  346
    16.3  ggplot2包  347
    16.4  交互式图形  351
    16.4.1  与图形交互:鉴别点  351
    16.4.2  playwith  352
    16.4.3  latticist  353
    16.4.4  iplots包的交互图形  354
    16.4.5  rggobi  355
    16.5  小结  356
    后记:探索r的世界  357
    附录a  图形用户界面  359
    附录b  自定义启动环境  362
    附录c  从r中导出数据  364
    附录d  制作出版级品质的输出  366
    附录e  r中的矩阵运算  374
    附录f  本书中用到的扩展包  376
    附录g  处理大数据  381
    附录h  更新r  383
    参考文献  385

    图书信息来源:中国互动出版

    转载于:https://www.cnblogs.com/china-pub/archive/2012/12/12/2814691.html

    展开全文
  • r语言实战

    2020-09-07 10:43:46
    R语言是面向对象的。面向对象的理论一两句话说不清楚(我不清楚),但对于数据至少应该了解三个:1、R能处理的东西(包括数据)都称为object。这个英文单词的意思原本很清楚,就是物体、物件的意思,但被计算机专家...

    R语言是面向对象的。面向对象的理论一两句话说不清楚(我不清楚),但对于数据至少应该了解三个:1、R能处理的东西(包括数据)都称为object。这个英文单词的意思原本很清楚,就是物体、物件的意思,但被计算机专家们翻译成“对象”以后就很玄乎了。2、 物(object)以类聚。一个object都应该能找到它所归属的某个类(class)。“类”是抽象的概念,一个类至少有一个特征是这类数据所共有 的。根据应用需求、目的等不同可以定义不同的类。比如做生物信息的可以定义出DNA类、RNA类,为了高效处理这类数据,定义这些类是非常必要的。所以R 里面有很多的“类”。3、类可以继承产生儿孙类。
    我们不可能也没必要去了解所有的“类”,但R语言定义的一些基本数据类得了解,而且得较详细地了解。这包括向量、因子、矩阵、列表、数据框和一些特殊值数据。一、向量(vector)我们通常接触的数据主要是数字、字符和逻辑(真和假,是或不是)类型的。数据有一个个的,也有一串串一批批的。在R里面,最基本的数据类是向量,即一串有序数据;但vector是虚拟类,没有父类型,它包含了在其他语言里面常说的基本数据类型如整型、字符型和逻辑型等:

    getClass(“vector”)
    Virtual Class “vector” [package “methods”]
    No Slots, prototype of class “logical”
    Known Subclasses: #已知子类
    Class “logical”, directly
    Class “numeric”, directly
    Class “character”, directly
    Class “complex”, directly
    Class “integer”, directly
    Class “raw”, directly
    Class “expression”, directly
    Class “list”, directly
    Class “structure”, directly, with explicit coerce
    Class “array”, by class “structure”, distance 2, with explicit coerce
    Class “matrix”, by class “array”, distance 3, with explicit coerce
    Class “signature”, by class “character”, distance 2
    Class “className”, by class “character”, distance 2
    Class “ObjectsWithPackage”, by class “character”, distance 2
    Class “mts”, by class “matrix”, distance 4, with explicit coerce
    Class “ordered”, by class “factor”, distance 3
    Class “namedList”, by class “list”, distance 2
    Class “listOfMethods”, by class “namedList”, distance 3
    R语言处理数据的最基本单位是向量,而不是原子数据。所以向量又称为原子向量(atomic vector),R语言的数据单位里面它最小(也最大,没有谁是它的父母)。但由于vector是虚拟类,不管用什么方式你都不可能获得类型名称叫“vector”的对象,只能获得它的直接子类的对象。下面的x是一个矩阵,虽然我们用as.vector函数进行转换,但获得对象的类名称是integer而不是vector:
    x <- matrix(1:4, nrow=2)
    class(x)
    [1] “matrix”
    class(as.vector(x))
    [1] “integer”
    一个向量可以是一串数字(n个数字,向量长度为n),也可以是1个数字(向量长度为1):
    x=1:40
    x
    [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
    [25] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
    x=1
    x
    [1] 1
    等于号可以用于向量赋值,但符号“<-”更常用,更好,更专业:
    x <- c(1,2,3)
    x
    [1] 1 2 3
    y <- c(“赵匡胤”, “钱学森”, “孙思邈”)
    y
    [1] “赵匡胤” “钱学森” “孙思邈”
    c( ) 是R的一个函数,表示将括号里面的内容连接起来成为一个向量。R提供了一些产生特殊向量的函数,如seq( )和rep( ),具体用法直接在R里面先输 入问号(?)和函数名去查询。vector是虚拟类,本身不指定数据的存储类型,但赋值以后就马上会有数字型(numeric)、字符型 (character)、逻辑型(logical)等实际类别,比如上面的变量x和y,用class( )函数获得的类型分别是数值型和字符型:
    class(x)
    [1] “numeric”
    class(y)
    [1] “character”
    一个向量只属于一种类型,如果改变了一个元素的值可能会改变该向量的类型:
    x <- seq(10)
    x
    [1] 1 2 3 4 5 6 7 8 9 10
    class(x)
    [1] “integer”
    x[2] <- “Adam”
    x
    [1] “1” “Adam” “3” “4” “5” “6” “7” “8” “9” “10”
    class(x)
    [1] “character”
    向量元素的引用/提取用下标法如 x[2],R语言的下标从1开始编号(而不是0)。二、因子(factor)R定义了一类非常特殊的数据类型:因子。比如我们的实验获得了10个数据,前5个数据来自对照样品CK,其余属于处理样品TR,R语言中可以用下面方法标识这10个数据的样品属性:
    sample <- rep(c(“CK”,“TR”), each=5)
    sample<- factor(sample)
    sample
    [1] CK CK CK CK CK TR TR TR TR TR
    Levels: CK TR
    因子的种类称为水平(level)。上面的样品sample因子有两个水平:CK和TR。因子类数据很特殊:
    getClass(“factor”)
    Class “factor” [package “methods”]
    Slots:
    Name: .Data levels .S3Class
    Class: integer character character
    Extends:
    Class “integer”, from data part
    Class “oldClass”, directly
    Class “numeric”, by class “integer”, distance 2
    Class “vector”, by class “integer”, distance 2
    Known Subclasses: “ordered”
    使用因子类数据是因为R是针对统计应用的语言。使用因子以后,数据的统计会完全不同。比如上面的两个样品10个测定数值如果是:
    value <- rnorm(10)
    value
    [1] 1.44368380 -1.99417898 0.60279037 0.75186610 1.08372729 -0.16189030
    [7] -0.05617801 1.03601538 -0.87932814 -0.32429184
    求样品的平均值就可以这么做:
    tapply(value, sample, mean)
    CK TR
    0.37757771 -0.07713458
    gl( )函数也可以方便地产生因子:
    sample <- gl(2, 5, labels = c(“CK”, “TR”))
    sample
    [1] CK CK CK CK CK TR TR TR TR TR
    Levels: CK TR
    三、矩阵(matrix)矩阵的继承关系比较复杂,它和数组(array)的关系既是父亲又是儿子,还是孙子:
    getClass(“matrix”)
    Class “matrix” [package “methods”]
    No Slots, prototype of class “matrix”
    Extends:
    Class “array”, directly
    Class “structure”, by class “array”, distance 2
    Class “vector”, by class “array”, distance 3, with explicit coerce
    Known Subclasses:
    Class “array”, directly, with explicit test and coerce
    Class “mts”, directly
    如果你愿意,也可以把矩阵称为数组,但事实上它们是不同的类。生物类数据以二维数组/矩阵居多。向量数据可以转成矩阵,下面代码将10个元素的x转成2行5列的矩阵:
    x <- 1:10
    dim(x) <- c(2,5)
    x
    [,1] [,2] [,3] [,4] [,5]
    [1,] 1 3 5 7 9
    [2,] 2 4 6 8 10
    dim(x)
    [1] 2 5
    dim( )是一个函数,它获取或设置数据的维度。注意x数据的行列排列顺序:先列后行。但是矩阵内数据的下标读取方式是先行后列。x[2, 1]是第2行第1列的值,x[2, ]表示第2行的所有数据,x[ ,2]表示第2列的所有数据。
    x[2,1]
    [1] 2
    x[2,]
    [1] 2 4 6 8 10
    x[ ,2]
    [1] 3 4
    把1个向量转成矩阵还可以使用matrix( )函数,参数nrow设置行数,ncol设置列数:
    matrix(1:10, nrow=2)
    [,1] [,2] [,3] [,4] [,5]
    [1,] 1 3 5 7 9
    [2,] 2 4 6 8 10
    几个长度相同的向量也可以合并到一个矩阵,cbind( )函数将每个向量当成一列(按列)合并,rbind( )按行合并:
    x <- 3:6
    y <- 4:7
    z <- 1:4
    cbind(x,y,z)
    x y z
    [1,] 3 4 1
    [2,] 4 5 2
    [3,] 5 6 3
    [4,] 6 7 4
    rbind(x,y,z)
    [,1] [,2] [,3] [,4]
    x 3 4 5 6
    y 4 5 6 7
    z 1 2 3 4
    不同向量的数据类型要相同,否则转换成矩阵后数据类型会变样。下面代码将height内的数字全都转成了字符类型,这可能不是你想要的结果:
    name <- c(“赵匡胤”, “钱学森”, “孙思邈”)
    height <- c(172, 175, 168)
    info <- rbind(name,height)
    info
    [,1] [,2] [,3]
    name “赵匡胤” “钱学森” “孙思邈”
    height “172” “175” “168”
    class(info)
    [1] “matrix”
    身高是数值,但跟姓名混合组成矩阵后就变成字符型了(输出结果中用双引号引起来)。矩阵元素可通过下标引用,多维矩阵可以只用一个下标,请注意info[3]获得的数据:
    info[1,]
    [1] “赵匡胤” “钱学森” “孙思邈”
    info[,1]
    name height
    “赵匡胤” “172”
    info[3]
    [1] “钱学森”
    四、列表(list)列表由向量直接派生而来,nameList是它的子类,listOfMethods是它家孙子:
    getClass(“list”)
    Class “list” [package “methods”]
    No Slots, prototype of class “list”
    Extends: “vector”
    Known Subclasses:
    Class “namedList”, from data part
    Class “listOfMethods”, by class “namedList”, distance 2
    那么列表是什么样子的呢?看这:
    gene <- list(agi=“AT1G00010”, gene.mode=c(“AT1G00010.1”, “AT1G00010.2”, “AT1G00010.3”), expression=matrix(1:10, ncol=2))
    gene
    $agi
    [1] “AT1G00010”
    $gene.mode
    [1] “AT1G00010.1” “AT1G00010.2” “AT1G00010.3”
    $expression
    [,1] [,2]
    [1,] 1 6
    [2,] 2 7
    [3,] 3 8
    [4,] 4 9
    [5,] 5 10
    列表可以组合不同的数据类型,甚至可以是其他列表,各组成数据的类、长度、维数都可以不一样。

    展开全文
  • 本文内容来自《R 语言实战》(R in Action, 2nd),有部分修改数值和字符处理函数统计函数x 1:8x[1] 1 2 3 4 5 6 7 8简化版本mean(x)[1] 4.5sd(x)[1] 2.44949冗长版本n length(x)meanx sum(x) / nmeanx[1] 4.5css sum...

    本文内容来自《R 语言实战》(R in Action, 2nd),有部分修改

    数值和字符处理函数

    统计函数

    x  1:8
    x
    [1] 1 2 3 4 5 6 7 8

    简化版本

    mean(x)
    [1] 4.5
    sd(x)
    [1] 2.44949

    冗长版本

    n  length(x)
    meanx sum(x) / n
    meanx
    [1] 4.5
    css  sum((x - meanx)^2)
    sdx sqrt(css / (n - 1))
    sdx
    [1] 2.44949

    scale() 函数

    scale(x)
               [,1]
    [1,] -1.4288690
    [2,] -1.0206207
    [3,] -0.6123724
    [4,] -0.2041241
    [5,] 0.2041241
    [6,] 0.6123724
    [7,] 1.0206207
    [8,] 1.4288690
    attr(,"scaled:center")
    [1] 4.5
    attr(,"scaled:scale")
    [1] 2.44949

    概率函数

    • d:密度函数

    • p:分布函数

    • q:分位数函数

    • r:随机数

    runif(5)
    [1] 0.3368141 0.3301134 0.9172243 0.7132270 0.5433076
    runif(5)
    [1] 0.5018690 0.5012920 0.2691537 0.1911182 0.1047126

    set.seed() 设置随机数种子

    set.seed(1234)
    runif(5)
    [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154
    set.seed(1234)
    runif(5)
    [1] 0.1137034 0.6222994 0.6092747 0.6233794 0.8609154

    多元正态数据

    MASS 包 mvrnorm() 函数

    library(MASS)
    options(digits=3)
    mean  c(230.7, 146.7, 3.6)
    sigma matrix(c(15360.8, 6721.2, -47.1,6721.2, 4000.9, -16.5,-47.1, -16.5, 0.3
    ),
    nrow=3,
    ncol=3
    )

    生成数据

    set.seed(1234)
    data mvrnorm(500, mean, sigma)
    data as.data.frame(data)names(data) c("y", "x1", "x2")
    dim(data)
    [1] 500   3
    head(data, n=10)
           y    x1   x2
    1 94.2 51.1 3.43
    2 249.6 195.6 3.81
    3 373.3 189.7 2.51
    4 -59.9 15.4 4.71
    5 305.9 123.3 3.41
    6 290.1 182.2 2.74
    7 140.7 154.9 4.41
    8 169.4 102.2 3.64
    9 165.5 104.8 3.50
    10 120.7 96.2 4.09

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

    a  5sqrt(5)
    [1] 2.24
    b  c(1.243, 5.654, 2.99)round(b)
    [1] 1 6 3
    c  matrix(runif(12), nrow=3)
    c
           [,1]  [,2]  [,3]  [,4]
    [1,] 0.9636 0.216 0.289 0.913
    [2,] 0.2068 0.240 0.804 0.353
    [3,] 0.0862 0.197 0.378 0.931
    log(c)
            [,1]  [,2]   [,3]    [,4]
    [1,] -0.0371 -1.53 -1.241 -0.0912
    [2,] -1.5762 -1.43 -0.218 -1.0402
    [3,] -2.4511 -1.62 -0.972 -0.0710
    mean(c)
    [1] 0.465

    apply() 函数

    data  matrix(rnorm(30), nrow=6)
    data
           [,1]   [,2]   [,3]   [,4]   [,5]
    [1,] 0.459 1.203 1.234 0.591 -0.281
    [2,] -1.261 0.769 -1.891 -0.435 0.812
    [3,] -0.527 0.238 -0.223 -0.251 -0.208
    [4,] -0.557 -1.415 0.768 -0.926 1.451
    [5,] -0.374 2.934 0.388 1.087 0.841
    [6,] -0.604 0.935 0.609 -1.944 -0.866
    dim(data)
    [1] 6 5

    1 表示计算每行的值

    apply(data, 1, mean)
    [1]  0.641 -0.401 -0.194 -0.136  0.975 -0.374

    2 表示计算每列的值

    apply(data, 2, mean)
    [1] -0.478  0.777  0.148 -0.313  0.292
    apply(data, 2, mean, trim=0.2)
    [1] -0.516  0.786  0.386 -0.255  0.291

    一个数据处理难题

    options(digits=2)

    Student c("John Davis", "Angela Williams", "Bullwinkle Moose","David Jones", "Janice Markhammer","Cheryl Cushing", "Reuven Ytzrhak","Greg Knox", "Joel England","Mary Rayburn"
    )
    math c(502, 600, 412, 358, 495, 512, 410, 625, 573, 522
    )
    science c(95, 99, 80, 82, 75, 85, 80, 95, 89, 86
    )
    english c(25, 22, 18, 15, 20, 28, 15, 30, 27, 18
    )
    roster data.frame(
    Student,
    math,
    science,
    english,
    stringsAsFactors=FALSE
    )
    roster
                 Student math science english
    1 John Davis 502 95 25
    2 Angela Williams 600 99 22
    3 Bullwinkle Moose 412 80 18
    4 David Jones 358 82 15
    5 Janice Markhammer 495 75 20
    6 Cheryl Cushing 512 85 28
    7 Reuven Ytzrhak 410 80 15
    8 Greg Knox 625 95 30
    9 Joel England 573 89 27
    10 Mary Rayburn 522 86 18

    计算综合得分

    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
    attr(,"scaled:center")
    math science english
    501 87 22
    attr(,"scaled:scale")
    math science english
    86.7 7.8 5.5
    score  apply(z, 1, mean)
    roster cbind(roster, score)
    roster
                 Student math science english score
    1 John Davis 502 95 25 0.56
    2 Angela Williams 600 99 22 0.92
    3 Bullwinkle Moose 412 80 18 -0.86
    4 David Jones 358 82 15 -1.16
    5 Janice Markhammer 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(
    score, c(.8, .6, .4, .2)
    )
    y
      80%   60%   40%   20% 
    0.74 0.44 -0.36 -0.89
    roster$grade[score >= y[1]]  "A"
    roster$grade[score < y[1] & score >= y[2]] "B"
    roster$grade[score < y[2] & score >= y[3]] "C"
    roster$grade[score < y[3] & score >= y[4]] "D"
    roster$grade[score < y[4]] "F"
    roster
                 Student math science english score grade
    1 John Davis 502 95 25 0.56 B
    2 Angela Williams 600 99 22 0.92 A
    3 Bullwinkle Moose 412 80 18 -0.86 D
    4 David Jones 358 82 15 -1.16 F
    5 Janice Markhammer 495 75 20 -0.63 D
    6 Cheryl Cushing 512 85 28 0.35 C
    7 Reuven Ytzrhak 410 80 15 -1.05 F
    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

    按姓氏和名字排序

    name  strsplit((roster$Student), " ")
    last_name sapply(name, "[", 2)
    first_name sapply(name, "[", 1)
    roster roster[order(last_name, first_name),]
    roster
                 Student math science english score grade
    6 Cheryl Cushing 512 85 28 0.35 C
    1 John Davis 502 95 25 0.56 B
    9 Joel England 573 89 27 0.70 B
    4 David Jones 358 82 15 -1.16 F
    8 Greg Knox 625 95 30 1.34 A
    5 Janice Markhammer 495 75 20 -0.63 D
    3 Bullwinkle Moose 412 80 18 -0.86 D
    10 Mary Rayburn 522 86 18 -0.18 C
    2 Angela Williams 600 99 22 0.92 A
    7 Reuven Ytzrhak 410 80 15 -1.05 F

    控制流

    feelings  c("sad", "afraid")for (i in feelings) {print(switch(
    i,
    happy = "I am glad you are happy",
    afraid = "There is nothing to fear",
    sad = "Cheer up",
    angry = "Calm down now"
    )
    )
    }
    [1] "Cheer up"
    [1] "There is nothing to fear"

    用户自编函数

    my_stats  function(x, parametric=TRUE, print=FALSE) {if (parametric) {
    center mean(x)
    spread sd(x)
    } else {
    center median(x)
    spread mad(x)
    }if (print & parametric) {cat("Mean", center, "\n", "SD=", spread, "\n")
    } else if (print & !parametric) {cat("Median=", center, "\n", "MAD=", spread, "\n")
    }
    result list(center=center, spread=spread)return(result)
    }
    set.seed(1234)
    x rnorm(500)
    y  my_stats(x)
    y
    $center
    [1] 0.0018

    $spread
    [1] 1
    y  my_stats(x, parametric=FALSE, print=TRUE)
    y
    Median= -0.021 
    MAD= 1
    $center
    [1] -0.021

    $spread
    [1] 1
    my_date  function(type="long") {switch(
    type,
    long = format(Sys.time(), "%A %B %d %Y"),
    short = format(Sys.time(), "%m-%d-%y"),cat(type, "is not a recognized type\n")
    )
    }
    my_date("long")
    [1] "星期三 十二月 30 2020"
    my_date("short")
    [1] "12-30-20"
    my_date()
    [1] "星期三 十二月 30 2020"
    my_date("medium")
    medium is not a recognized type

    整合与重构

    aggregate and reshape

    head(mtcars)
                      mpg cyl disp  hp drat  wt qsec vs am gear carb
    Mazda RX4 21 6 160 110 3.9 2.6 16 0 1 4 4
    Mazda RX4 Wag 21 6 160 110 3.9 2.9 17 0 1 4 4
    Datsun 710 23 4 108 93 3.8 2.3 19 1 1 4 1
    Hornet 4 Drive 21 6 258 110 3.1 3.2 19 1 0 3 1
    Hornet Sportabout 19 8 360 175 3.1 3.4 17 0 0 3 2
    Valiant 18 6 225 105 2.8 3.5 20 1 0 3 1

    转置

    cars  mtcars[1:5, 1:4]
    cars
                      mpg cyl disp  hp
    Mazda RX4 21 6 160 110
    Mazda RX4 Wag 21 6 160 110
    Datsun 710 23 4 108 93
    Hornet 4 Drive 21 6 258 110
    Hornet Sportabout 19 8 360 175
    t(cars)
         Mazda RX4 Mazda RX4 Wag Datsun 710 Hornet 4 Drive Hornet Sportabout
    mpg 21 21 23 21 19
    cyl 6 6 4 6 8
    disp 160 160 108 258 360
    hp 110 110 93 110 175

    整合数据

    options(digits=3)
    attach(mtcars)
    agg_data aggregate(
    mtcars,
    by=list(cyl, gear),
    FUN=mean,
    na.rm=TRUE
    )detach(mtcars)
    agg_data
      Group.1 Group.2  mpg cyl disp  hp drat   wt qsec  vs   am gear carb
    1 4 3 21.5 4 120 97 3.70 2.46 20.0 1.0 0.00 3 1.00
    2 6 3 19.8 6 242 108 2.92 3.34 19.8 1.0 0.00 3 1.00
    3 8 3 15.1 8 358 194 3.12 4.10 17.1 0.0 0.00 3 3.08
    4 4 4 26.9 4 103 76 4.11 2.38 19.6 1.0 0.75 4 1.50
    5 6 4 19.8 6 164 116 3.91 3.09 17.7 0.5 0.50 4 4.00
    6 4 5 28.2 4 108 102 4.10 1.83 16.8 0.5 1.00 5 2.00
    7 6 5 19.7 6 145 175 3.62 2.77 15.5 0.0 1.00 5 6.00
    8 8 5 15.4 8 326 300 3.88 3.37 14.6 0.0 1.00 5 6.00

    reshape2

    示例数据,包括两个标识符变量 ID 和 Time,两个测量变量 X1 和 X2

    my_data  data.frame(
    ID=c(1, 1, 2, 2),
    Time=c(1, 2, 1, 2),
    X1=c(5, 3, 6, 2),
    X2=c(6, 5, 1, 4)
    )
    my_data
      ID Time X1 X2
    1 1 1 5 6
    2 1 2 3 5
    3 2 1 6 1
    4 2 2 2 4
    library(reshape2)

    融合 melt()

    每一行都是一个单独的测量,表示为:

    唯一标识符 + 测量变量

    md  melt(my_data, id=c("ID", "Time"))
    md
      ID Time variable value
    1 1 1 X1 5
    2 1 2 X1 3
    3 2 1 X1 6
    4 2 2 X1 2
    5 1 1 X2 6
    6 1 2 X2 5
    7 2 1 X2 1
    8 2 2 X2 4

    重铸 dcast()

    不执行整合

    相当于被重塑 (reshape)

    dcast(md, ID + Time ~ variable)
      ID Time X1 X2
    1 1 1 5 6
    2 1 2 3 5
    3 2 1 6 1
    4 2 2 2 4
    dcast(md, ID + variable ~ Time)
      ID variable 1 2
    1 1 X1 5 3
    2 1 X2 6 5
    3 2 X1 6 2
    4 2 X2 1 4
    dcast(md, ID ~ variable + Time)
      ID X1_1 X1_2 X2_1 X2_2
    1 1 5 3 6 5
    2 2 6 2 1 4

    执行整合

    附加整合函数,例如 mean

    dcast(md, ID ~ variable, mean.default)
      ID X1  X2
    1 1 4 5.5
    2 2 4 2.5
    dcast(md, Time~variable, mean.default)
      Time  X1  X2
    1 1 5.5 3.5
    2 2 2.5 4.5
    dcast(md, ID~Time, mean.default)
      ID   1 2
    1 1 5.5 4
    2 2 3.5 3

    参考

    R 语言实战

    《图形初阶》

    《基本数据管理》


    dd0e23f481884cda98196cf754e6944a.png

    题图由 ArtTower 在 Pixabay 上发布。
    展开全文
  • 本文内容来自《R 语言实战》(R in Action, 2nd),有部分修改示例构造data.frame对象manager 1:5date c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09")country c("US","US","UK","UK","UK")gender c("M", "F...

    本文内容来自《R 语言实战》(R in Action, 2nd),有部分修改

    示例

    构造 data.frame 对象

    manager  1:5
    date c("10/24/08","10/28/08","10/1/08","10/12/08","5/1/09"
    )
    country c("US","US","UK","UK","UK"
    )
    gender c("M", "F", "F", "M", "F")
    age c(32, 45, 25, 39, 99)
    q1 c(5, 3, 3, 3, 2)
    q2 c(4, 5, 5, 3, 2)
    q3 c(5, 2, 5, 4, 1)
    q4 c(5, 5, 5, NA, 2)
    q5 c(5, 5, 2, NA, 1)
    leadership data.frame(
    manager,
    date,
    country,
    gender,
    age,
    q1,
    q2,
    q3,
    q4,
    q5,
    stringsAsFactors=FALSE
    )
    leadership
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2
    4 4 10/12/08 UK M 39 3 3 4 NA NA
    5 5 5/1/09 UK F 99 2 2 1 2 1

    每一列表示一个变量,每一行表示一个观测

    创建新变量

    三种方式

    赋值

    mydata  data.frame(
    x1=c(2, 2, 6, 4),
    x2=c(3, 4, 2, 8)
    )
    mydata$sumx mydata$x1 + mydata$x2
    mydata$meanx (mydata$x1 + mydata$x2)/2

    使用 attach() 省略对象名

    attach(mydata)
    mydata$sumx x1 + x2
    mydata$meanx (x1 + x2)/2detach(mydata)

    transform() 函数

    mydata  transform(
    mydata,
    sumx=x1 + x2,
    meanx=(x1 + x2)/2
    )

    变量的重编码

    修改现有变量

    leadership$age[leadership$age == 99]  NA
    leadership
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2
    4 4 10/12/08 UK M 39 3 3 4 NA NA
    5 5 5/1/09 UK F NA 2 2 1 2 1

    增加新变量

    leadership$agecat[leadership$age > 75]  "Elder"
    leadership$agecat[
    leadership$age >= 55 &
    leadership$age <= 75
    ] "Middle Aged"
    leadership$agecat[leadership$age < 55] "Young"
    leadership
      manager     date country gender age q1 q2 q3 q4 q5 agecat
    1 1 10/24/08 US M 32 5 4 5 5 5 Young
    2 2 10/28/08 US F 45 3 5 2 5 5 Young
    3 3 10/1/08 UK F 25 3 5 5 5 2 Young
    4 4 10/12/08 UK M 39 3 3 4 NA NA Young
    5 5 5/1/09 UK F NA 2 2 1 2 1

    使用 within 简化代码

    leadership  within(
    leadership,
    {
    agecat NA
    agecat[age > 75] "Elder"
    agecat[age >= 55 & age <= 75] "Middle Aged"
    agecat[age < 55] "Young"
    }
    )

    变量的重命名

    names() 函数

    names(leadership)
     [1] "manager" "date"    "country" "gender"  "age"     "q1"      "q2"      "q3"     
    [9] "q4" "q5" "agecat"
    names(leadership)[2]  "testDate"
    leadership
      manager testDate country gender age q1 q2 q3 q4 q5 agecat
    1 1 10/24/08 US M 32 5 4 5 5 5 Young
    2 2 10/28/08 US F 45 3 5 2 5 5 Young
    3 3 10/1/08 UK F 25 3 5 5 5 2 Young
    4 4 10/12/08 UK M 39 3 3 4 NA NA Young
    5 5 5/1/09 UK F NA 2 2 1 2 1

    plyr 包中的 rename() 函数

    library(plyr)

    leadership data.frame(
    manager,
    date,
    country,
    gender,
    age,
    q1,
    q2,
    q3,
    q4,
    q5,
    stringsAsFactors=FALSE
    )
    leadership rename(
    leadership,c(
    manager="managerID",
    date="testDate"
    )
    )
    leadership
      managerID testDate country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2
    4 4 10/12/08 UK M 39 3 3 4 NA NA
    5 5 5/1/09 UK F 99 2 2 1 2 1

    缺失值

    is.na() 函数

    is.na(leadership[, 6:10])
            q1    q2    q3    q4    q5
    [1,] FALSE FALSE FALSE FALSE FALSE
    [2,] FALSE FALSE FALSE FALSE FALSE
    [3,] FALSE FALSE FALSE FALSE FALSE
    [4,] FALSE FALSE FALSE TRUE TRUE
    [5,] FALSE FALSE FALSE FALSE FALSE

    NA 等特殊值无法使用逻辑关系符比较

    na_var  NA
    na_var == NA
    [1] NA

    Inf 和 -Inf 表示正无穷大和负无穷大

    is.infinite(5/0)
    [1] TRUE

    NaN 表示不可能的值

    is.nan(NaN)
    [1] TRUE

    重编码某些值为缺失值

    leadership  data.frame(
    manager,
    date,
    country,
    gender,
    age,
    q1,
    q2,
    q3,
    q4,
    q5,
    stringsAsFactors=FALSE
    )
    leadership$age[leadership$age == 99] NA
    leadership
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2
    4 4 10/12/08 UK M 39 3 3 4 NA NA
    5 5 5/1/09 UK F NA 2 2 1 2 1

    在分析中排除缺失值

    x  c(1, 2, NA, 3)
    x[1] + x[2] + x[3] + x[4]
    [1] NA
    sum(x)
    [1] NA

    na.rm 选项移除缺失值

    sum(x, na.rm=TRUE)
    [1] 6

    na.omit() 函数删除包含缺失值的观测,称为行删除。

    注:该方法仅是处理缺失值的一种方法。

    leadership
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2
    4 4 10/12/08 UK M 39 3 3 4 NA NA
    5 5 5/1/09 UK F NA 2 2 1 2 1
    trim_leadership  na.omit(leadership)
    trim_leadership
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2

    日期

    as.Date()

    默认格式为 yyyy-mm-dd

    as.Date(c("2007-06-22", "2004-02-13"))
    [1] "2007-06-22" "2004-02-13"

    格式字符串

    as.Date(c("01/05/1965", "08/16/1975"), "%m/%d/%Y")
    [1] "1965-01-05" "1975-08-16"
    leadership$date  as.Date(leadership$date, "%m/%d/%y")
    leadership
      manager       date country gender age q1 q2 q3 q4 q5
    1 1 2008-10-24 US M 32 5 4 5 5 5
    2 2 2008-10-28 US F 45 3 5 2 5 5
    3 3 2008-10-01 UK F 25 3 5 5 5 2
    4 4 2008-10-12 UK M 39 3 3 4 NA NA
    5 5 2009-05-01 UK F NA 2 2 1 2 1

    Sys.Date() 获取日期

    Sys.Date()
    [1] "2020-12-28"

    date() 获取时间

    date()
    [1] "Mon Dec 28 20:36:48 2020"

    format() 函数格式化日期

    today  Sys.Date()format(today, format="%B %d %y")
    [1] "十二月 28 20"
    format(today, format="%A")
    [1] "星期一"

    算术运算

    start_date  as.Date("2004-02-13")
    end_date as.Date("2011-01-22")
    days end_date - start_date
    days
    Time difference of 2535 days

    difftime()

    today  Sys.Date()
    dob as.Date("1956-10-12")difftime(today, dob, units="weeks")
    Time difference of 3350.429 weeks

    将日期转换为字符串变量

    str_date  as.character(today)
    str_date
    [1] "2020-12-28"

    lubridate 包

    library(lubridate)

    解析日期和时间

    ymd("20110604")
    [1] "2011-06-04"
    mdy("06-04-2011")
    [1] "2011-06-04"
    dmy("04/06/2011")
    [1] "2011-06-04"

    解析时间

    arrive  ymd_hms("2011-06-04 12:00:00", 
    tz="Pacific/Auckland"
    )
    arrive
    [1] "2011-06-04 12:00:00 NZST"
    leave  ymd_hms("2011-08-10 14:00:00", 
    tz="Pacific/Auckland"
    )
    leave
    [1] "2011-08-10 14:00:00 NZST"

    设置和提取信息

    second(arrive)
    [1] 0
    second(arrive)  25
    arrive
    [1] "2011-06-04 12:00:25 NZST"
    wday(arrive)
    [1] 7
    wday(arrive, label=TRUE)
    [1] 周六
    Levels: 周日 < 周一 < 周二 < 周三 < 周四 < 周五 < 周六

    时区

    meeting  ymd_hms("2011-07-01 09:00:00", 
    tz="Pacific/Auckland"
    )with_tz(
    meeting, "America/Chicago"
    )
    [1] "2011-06-30 16:00:00 CDT"
    mistake  force_tz(
    meeting,"America/Chicago"
    )with_tz(
    mistake,"Pacific/Auckland"
    )
    [1] "2011-07-02 02:00:00 NZST"

    时间段

    interval() 函数

    auckland  interval(arrive, leave)
    auckland
    [1] 2011-06-04 12:00:25 NZST--2011-08-10 14:00:00 NZST

    %--% 运算符

    auckland  arrive %--% leave
    auckland
    [1] 2011-06-04 12:00:25 NZST--2011-08-10 14:00:00 NZST
    jsm  interval(ymd(20110720, tz="Pacific/Auckland"),ymd(20110831, tz="Pacific/Auckland")
    )
    jsm
    [1] 2011-07-20 NZST--2011-08-31 NZST

    是否有重叠

    int_overlaps(jsm, auckland)
    [1] TRUE
    setdiff(auckland, jsm)
    [1] 2011-06-04 12:00:25 NZST--2011-07-20 NZST

    日期算术计算

    Period

    minutes(2)
    [1] "2M 0S"

    Duration

    dminutes(2)
    [1] "120s (~2 minutes)"

    Duration 与 Period 的区别

    leap_year(2011)
    [1] FALSE
    ymd(20110101) + dyears(1)
    [1] "2012-01-01 06:00:00 UTC"
    ymd(20110101) + years(1)
    [1] "2012-01-01"
    leap_year(2012)
    [1] TRUE
    ymd(20120101) + dyears(1)
    [1] "2012-12-31 06:00:00 UTC"
    ymd(20120101) + years(1)
    [1] "2013-01-01"

    计算

    meetings  meeting + weeks(0:5)
    meetings
    [1] "2011-07-01 09:00:00 NZST" "2011-07-08 09:00:00 NZST" "2011-07-15 09:00:00 NZST"
    [4] "2011-07-22 09:00:00 NZST" "2011-07-29 09:00:00 NZST" "2011-08-05 09:00:00 NZST"

    %within

    meetings %within% jsm
    [1] FALSE FALSE FALSE  TRUE  TRUE  TRUE
    auckland / ddays(1)
    [1] 67.08304
    auckland / ddays(2)
    [1] 33.54152
    auckland / dminutes(1)
    [1] 96599.58
    auckland %/% months(1)
    [1] 2
    auckland %% months(1)
    [1] 2011-08-04 12:00:25 NZST--2011-08-10 14:00:00 NZST

    as.period() 函数

    as.period(auckland %% months(1))
    [1] "6d 1H 59M 35S"
    as.period(auckland)
    [1] "2m 6d 1H 59M 35S"

    不合理时间

    jan31  ymd("2013-01-31")
    jan31 + months(0:11)
     [1] "2013-01-31" NA           "2013-03-31" NA           "2013-05-31" NA          
    [7] "2013-07-31" "2013-08-31" NA "2013-10-31" NA "2013-12-31"
    floor_date(jan31, "month") + months(0:11) + days(31)
     [1] "2013-02-01" "2013-03-04" "2013-04-01" "2013-05-02" "2013-06-01" "2013-07-02"
    [7] "2013-08-01" "2013-09-01" "2013-10-02" "2013-11-01" "2013-12-02" "2014-01-01"
    jan31 %m+% months(0:11)
     [1] "2013-01-31" "2013-02-28" "2013-03-31" "2013-04-30" "2013-05-31" "2013-06-30"
    [7] "2013-07-31" "2013-08-31" "2013-09-30" "2013-10-31" "2013-11-30" "2013-12-31"

    向量化

    lubridate 代码已开启向量化

    类型转换

    a  c(1, 2, 3)
    a
    [1] 1 2 3
    is.numeric(a)
    [1] TRUE
    a  as.character(a)
    a
    [1] "1" "2" "3"
    is.numeric(a)
    [1] FALSE
    is.vector(a)
    [1] TRUE
    is.character(a)
    [1] TRUE

    数据排序

    order() 函数

    new_data  leadership[order(leadership$age),]
    new_data
      manager       date country gender age q1 q2 q3 q4 q5
    3 3 2008-10-01 UK F 25 3 5 5 5 2
    1 1 2008-10-24 US M 32 5 4 5 5 5
    4 4 2008-10-12 UK M 39 3 3 4 NA NA
    2 2 2008-10-28 US F 45 3 5 2 5 5
    5 5 2009-05-01 UK F NA 2 2 1 2 1

    多重排序

    attach(leadership)
    new_data leadership[order(gender, age),]detach(leadership)
    new_data
      manager       date country gender age q1 q2 q3 q4 q5
    3 3 2008-10-01 UK F 25 3 5 5 5 2
    2 2 2008-10-28 US F 45 3 5 2 5 5
    5 5 2009-05-01 UK F NA 2 2 1 2 1
    1 1 2008-10-24 US M 32 5 4 5 5 5
    4 4 2008-10-12 UK M 39 3 3 4 NA NA

    逆序

    attach(leadership)
    new_data leadership[order(gender, -age),]detach(leadership)
    new_data
      manager       date country gender age q1 q2 q3 q4 q5
    5 5 2009-05-01 UK F NA 2 2 1 2 1
    2 2 2008-10-28 US F 45 3 5 2 5 5
    3 3 2008-10-01 UK F 25 3 5 5 5 2
    4 4 2008-10-12 UK M 39 3 3 4 NA NA
    1 1 2008-10-24 US M 32 5 4 5 5 5

    数据集的合并

    向数据框添加列

    merge() 函数

    total  merge(dataframeA, dataframeB, by="ID")
    total merge(dataframeA, dataframeB, by=c("ID", "Country"))

    向数据框添加行

    total  rbind(dataframeA, dataframeB)

    数据集取子集

    选入(保留)变量

    变量序号

    new_data  leadership[, c(6:10)]
    new_data
      q1 q2 q3 q4 q5
    1 5 4 5 5 5
    2 3 5 2 5 5
    3 3 5 5 5 2
    4 3 3 4 NA NA
    5 2 2 1 2 1

    变量名称

    selected_vars  c("q1", "q2", "q3", "q4", "q5")
    new_data leadership[selected_vars]
    new_data
      q1 q2 q3 q4 q5
    1 5 4 5 5 5
    2 3 5 2 5 5
    3 3 5 5 5 2
    4 3 3 4 NA NA
    5 2 2 1 2 1
    selected_vars  paste("q", 1:5, sep="")
    new_data leadership[selected_vars]
    new_data
      q1 q2 q3 q4 q5
    1 5 4 5 5 5
    2 3 5 2 5 5
    3 3 5 5 5 2
    4 3 3 4 NA NA
    5 2 2 1 2 1

    剔除(丢弃)变量

    变量名

    selected_vars  names(leadership) %in% c("q3", "q4")
    selected_vars
    [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE
    new_data  leadership[!selected_vars]
    new_data
      manager       date country gender age q1 q2 q5
    1 1 2008-10-24 US M 32 5 4 5
    2 2 2008-10-28 US F 45 3 5 5
    3 3 2008-10-01 UK F 25 3 5 2
    4 4 2008-10-12 UK M 39 3 3 NA
    5 5 2009-05-01 UK F NA 2 2 1

    变量序号

    new_data  leadership[c(-8, -9)]
    new_data
      manager       date country gender age q1 q2 q5
    1 1 2008-10-24 US M 32 5 4 5
    2 2 2008-10-28 US F 45 3 5 5
    3 3 2008-10-01 UK F 25 3 5 2
    4 4 2008-10-12 UK M 39 3 3 NA
    5 5 2009-05-01 UK F NA 2 2 1

    设置为 NULL

    leadership$q3  leadership$q4  NULL
    leadership
      manager       date country gender age q1 q2 q5
    1 1 2008-10-24 US M 32 5 4 5
    2 2 2008-10-28 US F 45 3 5 5
    3 3 2008-10-01 UK F 25 3 5 2
    4 4 2008-10-12 UK M 39 3 3 NA
    5 5 2009-05-01 UK F NA 2 2 1

    选入观测

    leadership  data.frame(
    manager,
    date,
    country,
    gender,
    age,
    q1,
    q2,
    q3,
    q4,
    q5,
    stringsAsFactors=FALSE
    )

    序号

    new_data  leadership[1:3, ]
    new_data
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    2 2 10/28/08 US F 45 3 5 2 5 5
    3 3 10/1/08 UK F 25 3 5 5 5 2

    条件筛选

    new_data  leadership[
    leadership$gender=="M" &
    leadership$age > 30,
    ]
    new_data
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    4 4 10/12/08 UK M 39 3 3 4 NA NA
    attach(leadership)
    new_data leadership[
    gender == "M" & age > 30,
    ]detach(leadership)
    new_data
      manager     date country gender age q1 q2 q3 q4 q5
    1 1 10/24/08 US M 32 5 4 5 5 5
    4 4 10/12/08 UK M 39 3 3 4 NA NA

    which() 函数

    leadership$date  as.Date(
    leadership$date, "%m/%d/%y"
    )
    start_date as.Date("2009-01-01")
    end_date as.Date("2009-10-31")
    new_data leadership[which(
    leadership$date >= start_date &
    leadership$date <= end_date
    ),
    ]
    new_data
      manager       date country gender age q1 q2 q3 q4 q5
    5 5 2009-05-01 UK F 99 2 2 1 2 1

    subset() 函数

    new_data  subset(
    leadership,
    age >= 35 | age < 24,
    select=c(q1, q2, q3, q4)
    )
    new_data
      q1 q2 q3 q4
    2 3 5 2 5
    4 3 3 4 NA
    5 2 2 1 2
    new_data  subset(
    leadership,
    gender == "M" & age > 25,
    select=gender:q4
    )
    new_data
      gender age q1 q2 q3 q4
    1 M 32 5 4 5 5
    4 M 39 3 3 4 NA

    随机抽样

    sample()

    sample_data  leadership[sample(1:nrow(leadership),3,
    replace=FALSE
    ),
    ]
    sample_data
      manager       date country gender age q1 q2 q3 q4 q5
    5 5 2009-05-01 UK F 99 2 2 1 2 1
    1 1 2008-10-24 US M 32 5 4 5 5 5
    4 4 2008-10-12 UK M 39 3 3 4 NA NA

    使用 SQL 语句操作数据框

    sqldf 包

    library(sqldf)
    df  sqldf("select * from mtcars where carb=1 order by mpg",
    row.names=TRUE
    )
    df
                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
    Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
    Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
    Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
    Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
    Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
    Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
    sqldf(
    paste(
    "select avg(mpg) as avg_mpg, avg(disp) as avg_disp, gear from mtcars",
    "where cyl in (4, 6) group by gear",
    sep=" "
    )
    )
       avg_mpg avg_disp gear
    1 20.33333 201.0333 3
    2 24.53333 123.0167 4
    3 25.36667 120.1333 5

    参考

    R 语言实战

    《R语言实战:图形初阶》


    7e33a033214fd48c6309f1a50144b0e3.png

    题图由 enriquelopezgarre 在 Pixabay 上发布。
    展开全文
  • R 语言实战_源代码

    2019-02-02 22:07:56
    R 语言实战,包含每个章节中用来实例,讲解的源代码,图灵社区在线数据~~
  • # 《R语言实战》第一章 R语言介绍# RStudio快捷键# 新文档Ctrl+Shift+N# 保存当前文档 Ctrl+S# 运行当前行 Ctrl+Enter# 运行当前文档 Ctrl+Alt+R# 快速注释Ctrl+Shift+Cgetwd() # 得到文件路径setwd("E:/专业课/R...
  • R语言简明参考卡片,中文版,常用命令汇总。 处理对象的常用函数来自R语言实战,函数详细使用方法help()。 如涉侵权请联系撤销
  • *R语言实战学习笔记,如涉及侵权,请联系撤稿。* **标题号与书中标题号对应** R语言实战 第1章 R语言介绍 1.2 R的获取与安装 R可以在CRAN(Comprehensive R Archive Network,http://cran.r-project.org)上免费...
  • R语言实战之行业案例分享视频课程

    千人学习 2017-06-06 18:13:05
    本课程属于数据挖掘及R语言实战的进阶篇,需要具备较扎实的R语言基础。希望通过本课程,能将以往学到的数据挖掘理论知识和R语言工具,利用四个不同行业的实际数据,如何从原始数据阶段,一步步进行数据清洗、数据...
  • R语言实战》中文电子版链接:https://pan.baidu.com/s/1IS1Fe8JjnoG4-ahBwCTgxQ ...所以,就以《R语言实战》为基础,开始R语言实战学习,争取再过一个月,能够熟练掌握科研中所需的基本绘图代码和统计学计算,并...
  • 重在实战!十五大案例,开启R语言实战之门金钥匙视频教程分享,网盘下载,附源码课件。希望可以帮助到大家!!!
  • R语言作为一种数据分析和机器学习的专业语言,是当今数据科学领域流行的免费开源编程语言之一,在数据分析与...《R语言实战入门教程》为大家介绍了R语言的入门及使用,希望能帮助大家认识R语言,用R语言提高工作效率。
  • R语言实战笔记

    千次阅读 2016-02-20 17:35:47
    R语言实战》(Venables&Ripley(2000)Chambers(2008)) 总结:脑残地按一定格式调用函数,尽情蹂躏数据。 1 R基础 在R中,对象(object)是指可以赋值给变量的任何事物,包括常量、数据结构、函数,甚至图形。 ...
  • 教程:《R语言实战》 学习内容:第一章、第二章 R语言实战 第一章:R语言介绍 &gt; getwd() # 显示当前工作目录 [1] "D:/Documents" &gt; setwd("E:\\Learning_R\\practice") ...
  • R语言实战(第2版)注重实用性,是一本全面而细致的R指南,高度概括了该软件和它的强大功能,展示了使用的统计示例,且对于难以用传统方法处理的凌乱、不完整和非正态的数据给出了优雅的处理方法。作者不仅仅探讨统计...
  • 从许多方面来看,回归分析都是统计学的核心。它其实是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量、效标变量或结果变量)的方法。...《R语言实战--...
  • 量化投资基础、方法与策略——R语言实战指南作译者:付志刚,沈慧娟 出版时间:2019-06千 字 数:594 版次:01-01页 数:480 ...
  • R语言实战-第一章

    2019-01-21 10:14:29
    R语言实战-第一章第一章R语言介绍1.3R的使用 第一章R语言介绍 你好!第一部分主要是 R语言 入门的内容,我们可以一起了解一下R的基本语法知识。 1.3R的使用 #执行脚本 source(“filename”) #文本输出 sink...
  • 最近沉迷学习R语言,不得不说《R语言实战》真的太详细了,详细的阅读完这本书后,我的收获不小。为了方便自己复习,将这本书的内容整理归纳为两个部分:统计篇(数据分析)和图形篇(数据可视化)。图形篇将会分为四个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,221
精华内容 1,288
关键字:

r语言实战