如何减去R中的某些列?

时间:2013-03-11 09:32:32

标签: r

我想在R中减去某一列?怎么做?

vec <- 1:20
mat <- matrix(vec,ncol=4)

mat
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20

例如,我想计算第1和第4,第2和第4,第3和第4之间的差异

结果:

M1 <- mat[,1]-mat[,4]

M2 <- mat[,2]-mat[,4]

M3 <- mat[,3]-mat[,4]
nmat <- data.frame(M1,M2,M3)
nmat

   M1  M2 M3
1 -15 -10 -5
2 -15 -10 -5
3 -15 -10 -5
4 -15 -10 -5
5 -15 -10 -5

2 个答案:

答案 0 :(得分:5)

尝试

vec <- 1:20
mat <- matrix(vec, ncol = 4)
mat[, 1:3] - mat[, 4]
##      [,1] [,2] [,3]
## [1,]  -15  -10   -5
## [2,]  -15  -10   -5
## [3,]  -15  -10   -5
## [4,]  -15  -10   -5
## [5,]  -15  -10   -5

PS:这在R中是非常基础的,也许你应该看看这里列出的一些基本的R教程。 https://stackoverflow.com/tags/r/info

答案 1 :(得分:1)

您也可以使用lapply函数

lapply(mat[[1]], function(k){return(mat[, 1:3] - mat[, 4])})

这使您有机会按列表计算。

and gives the following output: 
[[1]]
     [,1] [,2] [,3]
[1,]  -15  -10   -5
[2,]  -15  -10   -5
[3,]  -15  -10   -5
[4,]  -15  -10   -5
[5,]  -15  -10   -5

每次将mat[[1]]更改为例如[[2]]。 “lapply”函数将计算另一个列表。如果您只是放mat它将为每个列表计算。