我有一个包含以下内容的矩阵:
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
A
,B
,C
,D
是列名称,
a
,b
,c
,d
是行名称。
我想让它看起来像
A B C D
a 4 3 2 9
b 3 5 5 9
c 4 3 1 1
使用R,这是 1)按字母顺序排序行, 2)然后如果存在冗余行(即,存在具有相同行名的其他行),则在每列的冗余行中选择最大值并删除其他行。
我首先使用python来完成这个过程,但我想知道是否存在 这项工作在R.中更方便。
我将不胜感激。
答案 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
时保留行,然后使用max
将lapply(.SD,...)
函数应用于所有列{1}}变量(保存的行名称)
rn