矩阵中的列差异

时间:2013-10-03 15:12:51

标签: r matrix

这是我的示例矩阵

goog    appl    JPM    BAC    BYD     msft   TIBX
700.30  500.43  43.56  15.34  23.87  32.33   20.44
800.99  600.23  45.33  14.58  32.55  32.45   21.44
750.34  490.22  43.22  16.34  54.22  34.22   19.22 
690.00  540      0     19.45  27.44  36.26   24.54
790.33  650     45.00  18.34  29.47  34.56   23.98

我需要创建另一个矩阵,其中包含从今天到前一天的价格差异。我尝试使用(diff(mat[2,1],mat[2,2])然后执行sapply,但无法获得正确的结果diff(mat[2,1],mat[2,2])给我数字(0)。不知道为什么。输出应该是这样的

goog    appl     JPM     BAC    BYD     msft     TIBX
700.30  500.43   43.56   15.34  23.87   32.33    20.44
100.69  99.80    1.84   -0.80   9.55    0.12     1.44
-50.34 -109.99   -2.11   2.34   12.22   0.82    -2.22 
-60.30  49.88    -43.22  3.45   -27.44  2.26     3.54
100.33  90       1.98    2.34   2.47    0.56    -0.98

2 个答案:

答案 0 :(得分:3)

您应该只能在整个矩阵上调用diff

> mm<-as.matrix(read.table(text="goog    appl    JPM    BAC    BYD     msft   TIBX
+ 700.30  500.43  43.56  15.34  23.87  32.33   20.44
+ 800.99  600.23  45.33  14.58  32.55  32.45   21.44
+ 750.34  490.22  43.22  16.34  54.22  34.22   19.22 
+ 690.00  540      0     19.45  27.44  36.26   24.54
+ 790.33  650     45.00  18.34  29.47  34.56   23.98",header=T))
> diff(mm)
       goog    appl    JPM   BAC    BYD  msft  TIBX
[1,] 100.69   99.80   1.77 -0.76   8.68  0.12  1.00
[2,] -50.65 -110.01  -2.11  1.76  21.67  1.77 -2.22
[3,] -60.34   49.78 -43.22  3.11 -26.78  2.04  5.32
[4,] 100.33  110.00  45.00 -1.11   2.03 -1.70 -0.56
  

答案 1 :(得分:0)

使用apply

尝试此操作

您的数据:

mat <- read.table(text="goog    appl    JPM    BAC    BYD     msft   TIBX
700.30  500.43  43.56  15.34  23.87  32.33   20.44
800.99  600.23  45.33  14.58  32.55  32.45   21.44
750.34  490.22  43.22  16.34  54.22  34.22   19.22 
690.00  540      0     19.45  27.44  36.26   24.54
790.33  650     45.00  18.34  29.47  34.56   23.98", header=TRUE)

rbind(mat[1, ], apply(mat, 2, diff))

##     goog    appl    JPM   BAC    BYD  msft  TIBX
## 1 700.30  500.43  43.56 15.34  23.87 32.33 20.44
## 2 100.69   99.80   1.77 -0.76   8.68  0.12  1.00
## 3 -50.65 -110.01  -2.11  1.76  21.67  1.77 -2.22
## 4 -60.34   49.78 -43.22  3.11 -26.78  2.04  5.32
## 5 100.33  110.00  45.00 -1.11   2.03 -1.70 -0.56