这是我的示例矩阵
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
答案 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