R

时间:2015-11-10 19:35:49

标签: r

我认为应该是一个简单的问题,但我似乎无法找到解决问题的好方法。我有一个在循环中创建的矩阵,矩阵中的列数会有所不同。我想创建一个向量,其中向量中的每个项目计算如下(x是矩阵中的列数):

vec[1] = mat[1,1] - mat[1,2] - mat[1,3] - mat[1,4] -...- mat[1,x]

vec[2] = mat[2,1] - mat[2,2] - mat[2,3] - mat[2,4] -...- mat[2,x]

这很容易,只有两列,我想出了如何使用3列,但超过3列我被卡住了。这是我到目前为止的一个例子:

 # Create 4 column matrix
 mat <- matrix(c(rep(1, 10),
                 rep(2, 10),
                 rep(3, 10),
                 rep(4, 10)), nc = 4)

 #Create 2 column matrix and calculate: column1 - column2
 mat.2col <- mat[,1:2]
 sapply(1:nrow(mat.2col), function(x) 
   diff(rev(c(mat.2col[x,1], mat.2col[x,2])))
 )

 # Create 3 column matrix and calculate: column1 - column2 - column3
 mat.3col <- mat[,1:3]
 sapply(1:nrow(mat.3col), function(x) 
   diff(rev(c(diff(rev(mat.3col[x,1:(ncol(mat.3col)-1)])),mat.3col[x,ncol(mat.3col)])))
 )

当矩阵中的列数变化时,有关如何实现减去矩阵行中每个项目的任何建议吗?此外,减法物质的顺序(第2列必须从第1列中减去,等等。)

2 个答案:

答案 0 :(得分:4)

这将为第一个列中的所有列提供添加剂差异。

Reduce("-", as.data.frame(mat))

答案 1 :(得分:4)

我认为这就是你所追求的:

mat[,1] - rowSums(mat[,-1])