2013-10-03 2 views
0

Это мой пример матрицаразница столбца в матрице

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

Попробуйте это с помощью 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 
+0

Я думаю, я бы реализовать дифф отдельно. Моя проблема не работает, как объясняется в вопросе. Можете ли вы помочь с отличием. – greenH0rn

+0

Тогда ваши данные на самом деле не похожи на то, что вы говорите, или что-то не так с вашей системой (вы написали над базовым объектом R или чем-то еще). Я включил данные выше, которые я взял с вашего поста, и не получил такой ошибки. –

+1

@greenhorn вы писали по базовой функции 'diff'? Если это так, используйте 'diff <- base :: diff', чтобы исправить это. –

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 

+0

Таким образом, полный ответ: «rbind (mat [1,], diff (mat)) '. –

+0

Поскольку' mat' здесь является 'matrix', а не' data.frame', это также, вероятно, будет быстрее, чем метод 'data.frame'. – A5C1D2H2I1M1N2O1R2T1

Смежные вопросы