Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
766 views
in Technique[技术] by (71.8m points)

r - 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.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...