R删除冗余行中的非最大值

时间:2015-03-10 20:49:22

标签: r matrix

我有一个包含以下内容的矩阵:

   A   B   C   D  
a  1   3   2   5  
b  3   2   5   8 
a  2   1   0   9
a  4   2   1   3 
c  4   3   1   1
b  2   5   1   9

ABCD是列名称, abcd是行名称。

我想让它看起来像

   A   B   C   D  
a  4   3   2   9
b  3   5   5   9 
c  4   3   1   1

使用R,这是 1)按字母顺序排序行, 2)然后如果存在冗余行(即,存在具有相同行名的其他行),则在每列的冗余行中选择最大值并删除其他行。

我首先使用python来完成这个过程,但我想知道是否存在 这项工作在R.中更方便。

我将不胜感激。

3 个答案:

答案 0 :(得分:2)

您可以使用data.table

dt_in <- data.table(matrix_in)
dt_in[, name := rownames(matrix_in)]
dt_max <- dt_in[, list(A = max(A), B = max(B), C = max(C), D = max(D)), by = "name"]
as.matrix(data.frame(dt_max))

答案 1 :(得分:1)

您只需使用aggregate功能:

aggregate(matrix ~ rownames(matrix), matrix, max)

答案 2 :(得分:1)

此处&#39;使用data.table进行一次划线,您可以在转换为data.table时保留行,然后使用maxlapply(.SD,...)函数应用于所有列{1}}变量(保存的行名称)

rn