R 矩阵中的列差

R 矩阵中的列差,r,matrix,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

这是我的示例矩阵

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])
,然后做
,但是不能用
得到正确的结果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

使用
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

mat尝试使用
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

mat您应该能够在整个矩阵上调用
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
>毫米差(毫米)
goog appl JPM BAC比亚迪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


您应该能够在整个矩阵上调用
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
>毫米差(毫米)
goog appl JPM BAC比亚迪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


我想我必须单独实现diff。我的diff功能没有像问题中所解释的那样工作。你能帮我解决diff吗?那么你的数据看起来和你说的不一样,或者你的系统有问题(你写了一个R基对象或其他东西)。我包含了我从你的帖子中获取的上面的数据,没有出现这样的错误。@greenhorn你是不是在基本
diff
函数上写的?如果是的话,请使用
diff@Tyler是的,它现在正在工作。我的实际矩阵非常大,所以有没有更干净的方法将矩阵作为表格而不是文本来读取,因为我必须复制较大矩阵的内容测试字段中的矩阵。@greenH0rn我只是这样读取它,因为这是您提供数据的方式。无论您如何读取数据集,这都应该对数据集起作用。可能您直接用一些程序获取它,或者使用
read.csv
。通常是
read.table(text=
仅用于从像这里这样的地方获取数据,但在实际使用中,您不会使用ext参数。我想我必须单独实现diff。我的diff功能没有如问题中所解释的那样工作。请您帮助解决diff。然后,您的数据看起来与您所说的不一样,或者您的数据有问题系统(您在R基对象或其他对象上写入)。我包含了我从你的帖子中获取的上面的数据,没有出现这样的错误。@greenhorn你是不是在基本
diff
函数上写的?如果是的话,请使用
diff@Tyler是的,它现在正在工作。我的实际矩阵非常大,所以有没有更干净的方法将矩阵作为表格而不是文本来读取,因为我必须复制较大矩阵的内容测试字段中的矩阵。@greenH0rn我只是这样读取它,因为这是您提供数据的方式。无论您如何读取数据集,这都应该对数据集起作用。可能您直接用一些程序获取它,或者使用
read.csv
。通常是
read.table(text=
仅用于从这里这样的地方获取数据,但在实际使用中,您不会使用ext参数。因此,完整答案是
rbind(mat[1,],diff(mat))
。由于
mat
这里是一个
matrix
而不是
data.frame
,这也可能比
data.frame
方法更快。因此完整的答案是
rbind(mat[1],diff(mat))
。由于
mat
这里是一个
矩阵
而不是
数据帧
,因此这也可能比
数据帧
方法更快。