【问题标题】:New matrix containing difference between row elements of original包含原始行元素之间差异的新矩阵
【发布时间】:2012-08-21 09:44:29
【问题描述】:

我想取一个现有的 MxN 矩阵并创建一个新的 M-1xN 矩阵,这样对于每一列,元素都是原始矩阵的相邻行元素之间的差异。

这个想法是数据从累积类型变为速率类型......

例如: 我有(每列是一个特定的数据系列)。

   [,1]  [,2] [,3] 
[1,] "17"  "16" "15" 
[2,] "34"  "32" "32" 
[3,] "53"  "47" "48"  
[4,] "72"  "62" "63" 
[5,] "90"  "78" "79"  
[6,] "109" "94" "96"  

我想要 -

   [,1]  [,2] [,3] 
[1,] "17"  "16" "17"  
[2,] "19"  "15" "16" 
[3,] "19"  "15" "15" 
[4,] "18"  "16" "16" 
[5,] "19"  "16" "17" 

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    数值数据很简单(不知道你为什么有字符):

    diff(m)
    

    使用字符数据,这应该可以工作:

    diff(matrix(as.numeric(m), dim(m)))
    

    【讨论】:

      【解决方案2】:

      字符格式有点奇怪,但是有一个办法:

      # Set up the data
      mymat<-matrix(c("17","16","15",
        "34","32","32",
        "53","47","48" ,
        "72","62","63",
        "90","78","79" ,
        "109","94","96"),nrow=6,byrow=TRUE)
      

      apply 函数与以diff 为中心的匿名函数结合使用。

      apply(mymat, 2, function(x)as.character(diff(as.numeric(x))))
      
      #      [,1] [,2] [,3]
      # [1,] "17" "16" "17"
      # [2,] "19" "15" "16"
      # [3,] "19" "15" "15"
      # [4,] "18" "16" "16"
      # [5,] "19" "16" "17"
      

      如果数据以数字开头并且需要数字结果,则上述可以简化为

      apply(mymat, 2, diff)
      

      【讨论】:

        【解决方案3】:

        如果您想减去矩阵的列(而不是行),请尝试:

        col.diff = t(diff(t(mat)))
        

        【讨论】:

          猜你喜欢
          • 2013-12-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-19
          • 2022-10-02
          • 1970-01-01
          • 1970-01-01
          • 2016-05-26
          • 1970-01-01
          相关资源
          最近更新 更多