使用matrixStats :: rowMedians查找每行的中位数

时间:2018-07-25 18:04:32

标签: r dataframe matrix median

我正在尝试使用df包中的rowMedians计算数据帧matrixStats的行中位数。

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

我想计算每行的中位数,并将它们附加在新列中。我遇到了错误

  

参数“ x”必须是向量或矩阵

所以我尝试将df转换为矩阵。 str函数显示物种的每个值都是数字,所以我尝试了:

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

但是我仍然遇到相同的错误。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

您不想包括该Abundance列用于中位数计算。假设df是您当前的数据帧。

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

除了上面的正确代码外,还有一些注释。

  1. 您是否检查过matrix(df)是什么?
  2. 即使正确返回了一个数字矩阵,它也不会覆盖df。因此rowMedians(df)会给您带来相同的错误,好像什么也没发生;
  3. 作为练习,比较as.matrix(df[-1])as.matrix(df)

了解这些问题可以防止您将来出错。

答案 1 :(得分:2)

我认为您需要删除第一列,因为它不是数字:

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