我正在尝试使用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)
但是我仍然遇到相同的错误。任何帮助表示赞赏。
答案 0 :(得分:3)
您不想包括该Abundance
列用于中位数计算。假设df
是您当前的数据帧。
library(matrixStats)
rowMedians(as.matrix(df[-1]))
除了上面的正确代码外,还有一些注释。
matrix(df)
是什么?df
。因此rowMedians(df)
会给您带来相同的错误,好像什么也没发生; as.matrix(df[-1])
和as.matrix(df)
。了解这些问题可以防止您将来出错。
答案 1 :(得分:2)
我认为您需要删除第一列,因为它不是数字:
df$median_score <- apply(df[,-1], 1, median)