Home > front end >  divide each row with the value in the main diagonal in R
divide each row with the value in the main diagonal in R

Time:09-08

I have a dataset in R as follows.

dat <- as.data.frame(t(cbind(c(5,10,15,20),c(10,20,30,40),c(50,100,150,200),c(200,400,600,800))))
    dat

How can create a new dataframe dat_new that each row has been divided by the value in the main diagonal of the corresponding row? The final results must be:

> dat_new
1  1     5     3     4 
2  0.5   1     1.5   2 
3  0.33  0.66  1     1.33
4  0.25  0.5   0.75  1

CodePudding user response:

We extract the diag as a vector and divide

dat/diag(as.matrix(dat))

-output

     V1        V2   V3       V4
1 1.0000000 2.0000000 3.00 4.000000
2 0.5000000 1.0000000 1.50 2.000000
3 0.3333333 0.6666667 1.00 1.333333
4 0.2500000 0.5000000 0.75 1.000000

CodePudding user response:

We could do it this way also (it is the same as @akrun's solution):

dat/dat[col(dat)==row(dat)]

         V1        V2   V3       V4
1 1.0000000 2.0000000 3.00 4.000000
2 0.5000000 1.0000000 1.50 2.000000
3 0.3333333 0.6666667 1.00 1.333333
4 0.2500000 0.5000000 0.75 1.000000
  • Related