2013-03-11 2 views
0

Я хотел бы вычесть один определенный столбец в 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 
+4

И в чем ваш вопрос? Кажется, ваш код работает? – juba

+4

Почему не 'мат-мат [, 4]'? – Roland

+1

или 'mat [, 1: 3] - мат [, 4]' –

ответ

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

Вы также можете использовать функцию 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, он рассчитает для каждого списка.