R 将百分比变化计算应用于矩阵
我试图在R中做一些相对简单的事情;我试图计算矩阵中每个组成部分从一行到下一行的百分比变化。这是我正在运行的代码R 将百分比变化计算应用于矩阵,r,matrix,R,Matrix,我试图在R中做一些相对简单的事情;我试图计算矩阵中每个组成部分从一行到下一行的百分比变化。这是我正在运行的代码 > fun <- function(x) diff(x, lag=1)/lag(x,1); > mat <- dx[2490:2520,]; > mat <- apply(mat, 2, fun); There were 30 warnings (use warnings() to see them) > warnings() Warning
> fun <- function(x) diff(x, lag=1)/lag(x,1);
> mat <- dx[2490:2520,];
> mat <- apply(mat, 2, fun);
There were 30 warnings (use warnings() to see them)
> warnings()
Warning messages:
1: In diff(x, lag = 1)/lag(x, 1) :
longer object length is not a multiple of shorter object length
>趣味垫警告()
警告信息:
1:在差异(x,滞后=1)/滞后(x,1)中:
较长的对象长度不是较短对象长度的倍数
R控制台将此消息返回给我,我不知道为什么。如果这不起作用,有人能指出另一种计算百分比变化的方法吗?如果输入是
m
行和n
列,并且您希望输出是m-1
行和n
列,则:
(mat <- matrix(sample(50, 15, replace = TRUE), nr=3, nc=5))
## [,1] [,2] [,3] [,4] [,5]
## [1,] 28 2 21 9 2
## [2,] 18 11 8 2 24
## [3,] 21 2 20 8 21
apply(mat, 2, function(cc) (cc[-1] - head(cc, n = -1)) / head(cc, n = -1))
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.3571429 4.5000000 -0.6190476 -0.7777778 11.000
## [2,] 0.1666667 -0.8181818 1.5000000 3.0000000 -0.125
(您可以使用pctChangelag
不会缩短向量,但diff
会缩短向量。
nr <- nrow(mat)
(mat[-1,] - mat[-nr,]) / mat[-nr,]
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.3571429 4.5000000 -0.6190476 -0.7777778 11.000
## [2,] 0.1666667 -0.8181818 1.5000000 3.0000000 -0.125