zoukankan      html  css  js  c++  java
  • R语言(一)

    向量运算

    R的强大功能之一就是把整个数据向量作为一个单一对象来处理。一个数据向量仅是数字的排列,一个向量可以通过如下方式构造

    weight<-c(2,34,434,53)
    weight
    [1]   2  34 434  53

    结构c(……)用来构造向量。这既不是R中输入向量的唯一方法,也不是一般首选的方法。

    如果要对上述变量做数学运算,则是逐个元素的方式进行。

    作图

    plot(height,weight,pch=2)

    关键字pch(绘图符号)改变绘图符号

    函数lines将通过一条直线将(x,y)值增加到现有的图中

    生成向量的函数

    这里介绍3个函数:c、seq和rep,用于不同情形下向量的创建。

    第一个函数c,它是“concatenate”(连接)的简写,含义是把各分项首尾连接

    另外也有可能给某些元素命名。这改变了变量输出的方式,这样做通常是出于显示的目的。

    > x<-c(red="Huey",blue="Dewey",green="Louie")
    > x
        red    blue   green 
     "Huey" "Dewey" "Louie"

    名称可以被提取或使用names设置

    > names(x)
    [1] "red"   "blue"  "green"


    一个向量的所有元素类型都相同。如果你连接不同类型的向量,它们将被转化为最少“限制”的类型:

    > c(FALSE,3)
    [1] 0 3
    > c(pi,"abc")
    [1] "3.14159265358979" "abc"             
    > c(FALSE,"abc")
    [1] "FALSE" "abc"


    也就是说,逻辑值被转换为0/1或“False”/”True”,数字转换为它们的输出形式的字符串。

    第二个函数seq(“sequence”),用来建立数字等差序列,如

    > seq(4,9)
    [1] 4 5 6 7 8 9


    如果希望间距是2,

    > seq(4,10,2)
    [1]  4  6  8 10

    第三个函数rep(“replicate”),用来产生重复值。使用时有两个参数,依赖于第二个参数是一个向量还是一个数字,产生的结果会有不同

    > oops<-c(7,9,13)
    > rep(oops,3)
    [1]  7  9 13  7  9 13  7  9 13
    > rep(oops,1:3)
    [1]  7  9  9 13 13 13


    第一个rep哈桑农户对整个向量oops重复三次。第二次调用用一个有3个值(1,2,3)的向量代替数字3;这些值相应于oops向量的每一个元素,意味着7重复1次,9重复2次,13重复3次。

    矩阵和数组

    矩阵就是一个二维数值数组。

    > x<-1:12
    > dim(x)<-c(3,4)
    > x
         [,1] [,2] [,3] [,4]
    [1,]    1    4    7   10
    [2,]    2    5    8   11
    [3,]    3    6    9   12

    创建矩阵的一个方便的方法是使用matrix函数:

    matrix(1:12,nrow=3,byrow=T)
         [,1] [,2] [,3] [,4]
    [1,]    1    2    3    4
    [2,]    5    6    7    8
    [3,]    9   10   11   12


    请注意,这里byrow=T将矩阵改变成以按行而不是按列形式填充。

    对矩阵进行操作的有用函数包括rownames、colnames、转置函数t

    > x<-matrix(1:12,nrow=3,byrow=T)
    > rownames(x)<-LETTERS[1:3]
    > x
      [,1] [,2] [,3] [,4]
    A    1    2    3    4
    B    5    6    7    8
    C    9   10   11   12
    > t(x)
         A B  C
    [1,] 1 5  9
    [2,] 2 6 10
    [3,] 3 7 11
    [4,] 4 8 12


    特征i向量LETTERS是一个包含大写字母A——Z的内置变量。其他有用的相似变量是分别表示小写字母、月份名称、月份名称缩写的letters、month.name和month.abb


    可以按行或者按列分别使用cbind和rbind函数将向量“粘”到一起。

    > cbind(A=1:4,B=5:8,C=9:12)
         A B  C
    [1,] 1 5  9
    [2,] 2 6 10
    [3,] 3 7 11
    [4,] 4 8 12
    > rbind(A=1:4,B=5:8,C=9:12)
      [,1] [,2] [,3] [,4]
    A    1    2    3    4
    B    5    6    7    8
    C    9   10   11   12


    因子

    分类变量在统计数据中是常见的,表明数据的某些细分属性,如社会阶层、主要诊断、肿瘤分期、青春期阶段等。通常它们用数字代码输入。

    在R中,这些变量被指定为因子。这种数据结构使得不同的分类类别被赋予有意义的名称成为可能。

    对R来说,区分类别编码和取值有直接数字含义的变量是最基本的。

    术语说一个因子有一系列水平——比方说4个水平。一个四水平因子包含两项含义:a)1到4之间整数的一个向量b)一个长度为4的包含字符串的特征向量

    看一个例子:

    > pain<-c(0,3,2,2,1)
    > fpain<-factor(pain,levels=0:3)
    > levels(fpain)<-c("none","mild","medium","severe")


    第一个命令创建了一个数值向量pain,对5个病人的疼痛水平编码。我们希望把他作为一个分类变量处理,所以我们通过它利用函数factor创建一个因子fpain。它的调用除了pain以外,还跟着另一个参数即levels=0:3,这意味着输入的编码使用了4个值0~3.后者在理论上可以省略,因为R默认使用pain中合理排序的值,但保留它是一个很好的习惯,如下所示。最后一行的作用是将水平名称转换为特定的4个字符串.

    > fpain
    [1] none   severe medium medium mild  
    Levels: none mild medium severe
    > as.numeric(fpain)
    [1] 1 4 3 3 2
    > levels(fpain)
    [1] "none"   "mild"   "medium" "severe"


    函数as.numeric提取数字编码为1~4,levels提取水平的名称。注意根据数字0~3的原始输入编码不显示了,一个因子的内置表达方式始终是从1开始的数字。

    列表

    可以通过函数list创建一个列表。

    > intake.pre<-c(5260,5470,5640,6180,6390,6515,6805,7515,7515,8230,8770)
    > intake.post<-c(3910,4220,3885,5160,5645,4680,5265,5975,6790,6900,7335)
    > mylist<-list(before=intake.pre,after=intake.post)
    > mylist
    $before
     [1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770
    
    $after
     [1] 3910 4220 3885 5160 5645 4680 5265 5975 6790 6900 7335


    列表各部分通过list中使用的参数名称来命名。命名的部分可以如下提取:

    mylist$before
     [1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770

    数据框

    数据框被称为“数据矩阵”或“数据集”。它是一系列等长度的向量和/或因子,它们交叉相关,使得同一位置的数据来自同一试验单元(对象、动物等)。除此之外,它具有唯一的一组行名称。

    > d<-data.frame(intake.pre,intake.post)
    > d
       intake.pre intake.post
    1        5260        3910
    2        5470        4220
    3        5640        3885
    4        6180        5160
    5        6390        5645
    6        6515        4680
    7        6805        5265
    8        7515        5975
    9        7515        6790
    10       8230        6900
    11       8770        7335


    像list一样,组分(单个变量)可以通过$符号获得:

    > d$intake.pre
     [1] 5260 5470 5640 6180 6390 6515 6805 7515 7515 8230 8770


    索引

    如果需要向量中一个具体的元素

    >intake.pre[5]
    [1] 6390

    方括号用来选择数据,也称为索引或子集选择

    如果希望一个包含多于一个的数据的子向量,比如序号为3、5、7、可以用一个向量来索引:

    > intake.pre[c(3,5,6)]
    [1] 5640 6390 6515


    R的一个巧妙功能是可以使用负索引。可以通过下式得到除了位置为3、5、7之外的所有其他元素

    > intake.pre[-c(3,5,6)]
    [1] 5260 5470 6180 6805 7515 7515 8230 8770


    排序

    对向量排序,只需使用sort函数即可

    > sort(intake.post)
     [1] 3885 3910 4220 4680 5160 5265 5645 5975 6790 6900 7335


    然而,仅对一个单一的向量排序并不总能满足需求。经常需要根据某些其他变量的值对一系列变量排序——如果根据性别和年龄对血压排序。为此目的,有一个结构看上去很抽象,但确实功能强大。首先计算一个变量的次序。

    order(intake.post)
     [1]  3  1  2  6  4  7  5  8  9 10 11


    结果是数字1至11(或者其他的向量长度),根据order参数(这里是intake.post)的大小排序。对order结果的解释优点棘手——应该是如下所述:通过将其值依次置于3、1、2、6等对intake.post排序。

    o<-order(intake.post)
    > intake$post[o]
     [1] 3885 3910 4220 4680 5160 5265 5645 5975 6790 6900 7335
  • 相关阅读:
    xcode多target管理不同的环境(pod多target配置)
    OC与swift混编 #import "项目名-Swift.h"失效问题
    令人困惑的strtotime
    krpano 学习第一天
    git 全量同步分支
    MYSQL 什么时候用单列索引?什么使用用联合索引?
    _blocking_errnos = {errno.EAGAIN, errno.EWOULDBLOCK} pip
    Mac php 装imagick扩展 菜鸟教程
    git仓库搬家
    文章简介 字符串截取
  • 原文地址:https://www.cnblogs.com/yifdu25/p/8449145.html
Copyright © 2011-2022 走看看