R-平均大型矩阵

时间:2018-07-22 18:33:32

标签: r matrix

我目前有一个大型矩阵,具有 72行 919列

amatrix <- matrix(rexp(919, rate=.1), ncol=919, nrow=72)

由于这是一个包含technical replicates的数据框,因此在进行进一步分析之前,我必须首先对技术复制品的值求平均值。技术复制是连续的(行),每组3个。

  • 有没有一种方法可以同时平均3行,从而生成具有 24行 919列的新矩阵?

到目前为止,我一直在手动执行此部分,然后将数据导入R。必须有一种方法可以在R中执行此操作,但是我找不到类似的答案。

1 个答案:

答案 0 :(得分:1)

我相信关键是要知道如何使用R代码来描述模式,例如

rep(1:(nrow(amatrix)/3), each=3)

这只是组级别聚合的问题。您可以使用任何基础的dplyrdata.table或其他聚合方法来完成此操作。

让我们从基数R开始。

我更喜欢将其作为data.frame使用,但是您也可以将其保留为矩阵,而只需使用[]索引而不是$来创建新向量:

amatrix                      <- as.data.frame(matrix(rexp(919, rate=.1), ncol=919, nrow=72))
amatrix$technical_rep_number <- rep(1:(nrow(amatrix)/3), each=3)

创建此向量实际上完全是可选的。您也可以保持矩阵不变,而只需在聚合函数中指定模式(在这种情况下为rep(1:(nrow(amatrix)/3), each=3))。

从基数R开始,我们可以使用aggregate

new_table <- aggregate(amatrix, by=list(amatrix$technical_rep_number), mean)

nrow(new_table)
24

dplyr中,我们可以使用group_bysummarize

new_table <- amatrix %>% 
              group_by(technical_rep_number) %>% 
              summarize(mean1 = mean(V1)) # etc

您也可以一次like this利用所有列的方法:

new_table <- amatrix %>% 
              group_by(technical_rep_number) %>% 
              summarise_each(funs(mean))

请注意,summarise_each()已过时,所以我建议summarize_all()

new_table <- amatrix %>% 
              group_by(technical_rep_number) %>% 
              summarize_all(funs(mean))