0

既存の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" 
4

3 に答える 3

4

数値データの場合は非常に簡単です(文字がある理由はわかりません)。

diff(m)

文字データを使用すると、これは機能するはずです。

diff(matrix(as.numeric(m), dim(m)))
于 2012-08-21T10:04:12.633 に答える
1

文字の形式は少し奇妙ですが、方法は次のとおりです。

# 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)
于 2012-08-21T09:58:05.200 に答える
0

(行ではなく)行列の列を減算する場合は、次のことを試してください。

col.diff = t(diff(t(mat)))
于 2016-07-20T17:10:56.993 に答える