Pablita
Pablita

Reputation: 89

Find median of every row using matrixStats::rowMedians

I am trying to calculate the row median for a data frame df with rowMedians from matrixStats package.

Abundance Sample1 Sample2 Sample3 Sample4 Sample5 Sample6 Sample7
Species1   2        4       0       0       0       6       0
Species2   3        5       6       4       0       0       0
Species3   3        7       2       5       8       0       0
Species4   0        0       3       8       0       0       8
Species5   7        5       6       0       0       4       4
Species6   4        2       3       0       0       2       1

I want to calculate the median of every row and append them in a new column. I got an error

Argument 'x' must be a vector or matrix

so I tried to convert my df to a matrix. The str function shows that every value for the species is numeric, so I tried:

library(matrixStats)
matrix(df, rownames.force = NA)
rowMedians(df)

but I am still getting the same error. Any help is appreciated.

Upvotes: 2

Views: 1156

Answers (2)

Zheyuan Li
Zheyuan Li

Reputation: 73275

You don't want to include that Abundance column for median calculation. Let df be your current data frame.

library(matrixStats)
rowMedians(as.matrix(df[-1]))

A few comments besides the correct code above.

  1. Have you checked what matrix(df) is?
  2. Even if it correctly returns you a numeric matrix, it does not overwrite df. So rowMedians(df) gives you the same error as if nothing has happened;
  3. As an exercise, compare as.matrix(df[-1]) and as.matrix(df).

Understanding these issues prevents you from getting errors in future.

Upvotes: 5

YOLO
YOLO

Reputation: 21709

I think you need to remove first column because it's not numeric :

df$median_score <- apply(df[,-1], 1, median)

Upvotes: 2

Related Questions