zoukankan      html  css  js  c++  java
  • R语言系列:数据的基本运算

    基本运算符号 
    1、基本数学计算 
    +、-、*、/、^、%%(求模)、%/%(整除) 
    注意:求模运算两边若为小数,则整数和小数部分分别求模。例:5.6%%2.2 
    2、比较运算 
    >、<、>=、<=、==、!= 
    3、&、|、!、&&、||、xor 
    注意:运算符“逻辑与”和“逻辑或”存在两种形式,“&”和“|”作用在对象中的每一个元素上并且返回和比较次数相等长度的逻辑值;“&&”和“||”只作用在对象的第一个元素上。

    xor为异或,两值不等为真,两值相等为假。例:xor(0, 1)
    4、常见运算函数
    abs、sqrt、exp、log、log10、log2
    sin、cos、tan、asin、acos、atan、atan2
    choose(n, k)    #n个里面取k个的组合数
    计算n!的方法:factorial(n); gamma(n+1); prod(1:n)
    sign(x)    #返回x的正负号

    R中计算的两个特点
    1、向量化(逐个元素循环操作) 
    例:y=1:10; y+1; sqrt(y);
    2、两个不等长的变量循环填充
    例:x=1:3; y=1:10; z=x+y
    注意:当两个变量长度不是整倍数的关系,会有警告信息。

    向量常用统计函数
    max、min、range(返回最小、最大两个值)、sum、prod(连乘Π)、mean、median(中位数)、var、sd、length、rev(取逆序)
    which.max、which.min:返回最大、最小值的下标
    which:返回符合条件元素的下标
        x=matrix(1:20,4,byrow=T);
        which(x > 8)    #返回一个向量
        which(x > 8, arr.ind=T)    #返回一个指示行列号的矩阵
    diff:差分,即x[i+1]-x[i]
    cumsum:计算x[i]=sum(x[1]:x[i])
    cumprod:计算x[i]=prod(x[1]:x[i])
    sort、rank、order:参见http://my.oschina.net/explore/blog/84359
    quantile(x, probs=)    #默认probs为c(0, .25, .5, .75, 1)
        例:x=0:100; quantile(x); quantile(x, probs=seq(0, 1, 0.1)
    IQR:四分位数间距
    summary:给出常见统计量,包括四分位数、最小、最大和中位数
    weighted.mean(x, y)    #加权平均,等同于sum(x*y)/sum(y)
    cov、cor:两向量的协方差和线性相关系数
        #可使用参数 method = c("pearson", "kendall", "spearman"))指定计算方法,默认第一种。
        #方法名称可使用首字母缩写
    table(x)    #当x为定性数据时,统计x的频数
    table(x,y,z)    #输出由x、y、z三个定性变量组成的列联表
    ftable(x,y,z)    #以多重嵌套二维表的形式输出有x、y、z三个定性变量组成的列联表
    nchar(x)    #x为字符串,求x的字符个数
        例:x=c("china", "english", "amercia"); nchar(x);
    match(x,y)    #再y中逐个查找x,若有返回在y中匹配的位置,若无返回NA
    all、any    #分别报告各元素是否全部或至少一个为TRUE

    矩阵常用函数
    t:转置(行列互换)
    cov、cor:协方差阵和协相关系数阵
    diag:提取对角元素,输出为一个向量
    rbind、cbind:按行合并、按列合并,可合并若干向量,也可合并若干矩阵
    *:逐元乘积
    %*%:代数乘积
    crossprod:交叉乘积
    det:矩阵的行列式值
    eigen:特征根和特征向量
    qr:QR分解
    scale:对矩阵进行中心化和标准化

    集合运算
        union(x,y)    #求并集
        intersect(x,y)    #求交集
        setdiff(x,y)    #求属于x而不属于y的所有元素
        setequal(x,y)    #判断x与y是否相等
        a %in% y    #判断a是否为y中的元素
        choose(n, k)    #n个里面取k个的组合数
        combn(x,n)    #x中的元素每次取n个的所有组合
            combn(x,n,f)     #将这些组合用于指定函数f

    向量化(apply)
    apply(x, MARGIN, FUN)    #MARGIN为1则逐行运算,2则逐列运算。FUN为所用函数。
        当x为数组时,MARGIN可大于2,或使用c(1,2)表示按行列计算。
    lapply、sapply:用于列表,前者返回列表,后者返回矩阵或向量

    附:峰度和偏度的计算
    R默认不提供函数计算这两个值。
    如果需要计算,可以自编公式或者使用fBasics包。
    加载fBasics包,可使用以下命令进行计算:
        skewness(x)    #偏度
        kurtosis(x)    #峰度
         basicStates(x)    #提供16个统计量

    > x=rnorm(1000)
    > basicStats(x)
                          x
    nobs        1000.000000
    NAs            0.000000
    Minimum       -3.263744
    Maximum        3.462402
    1. Quartile   -0.706243
    3. Quartile    0.652421
    Mean          -0.043407
    Median         0.003339
    Sum          -43.406637
    SE Mean        0.031843
    LCL Mean      -0.105894
    UCL Mean       0.019081
    Variance       1.014007
    Stdev          1.006979
    Skewness      -0.029121
    Kurtosis      -0.179738

  • 相关阅读:
    VS2010 自动跳过代码现象
    Reverse Linked List II 【纠结逆序!!!】
    Intersection of Two Linked Lists
    Linked List Cycle II
    Remove Nth Node From End of List 【另一个技巧,指针的指针】
    Swap Nodes in Pairs
    Merge Two Sorted Lists
    Remove Duplicates from Sorted List
    Linked List Cycle
    Dungeon Game
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751572.html
Copyright © 2011-2022 走看看