我目前有一个大型矩阵,具有 72行和 919列。
amatrix <- matrix(rexp(919, rate=.1), ncol=919, nrow=72)
由于这是一个包含technical replicates的数据框,因此在进行进一步分析之前,我必须首先对技术复制品的值求平均值。技术复制是连续的(行),每组3个。
到目前为止,我一直在手动执行此部分,然后将数据导入R。必须有一种方法可以在R中执行此操作,但是我找不到类似的答案。
答案 0 :(得分:1)
我相信关键是要知道如何使用R代码来描述模式,例如
rep(1:(nrow(amatrix)/3), each=3)
这只是组级别聚合的问题。您可以使用任何基础的dplyr
,data.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_by
和summarize
:
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))