R - 按重复值过滤矩阵

use*_*195 2 r matrix

我有以下矩阵:

      [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    2    1    3    5    1
[2,]    3    5    4    6    7    2
Run Code Online (Sandbox Code Playgroud)

我需要过滤此矩阵,以便删除第1行中包含重复元素的列,只留下第2行中包含最大值的列.因此,在此示例中,需要删除输入矩阵的第1列和第6列:

      [,1] [,2] [,3] [,4]
[1,]    2    1    3    5
[2,]    5    4    6    7
Run Code Online (Sandbox Code Playgroud)

在R中有一个简单的方法吗?

谢谢

jos*_*ber 5

您可以计算每个第一行元素的最大第二行值,然后只保留第二行是第一行中元素的最大值的列:

(maxes <- tapply(mat[2,], mat[1,], max))
# 1 2 3 5 
# 4 5 6 7 
(mat2 <- mat[,maxes[as.character(mat[1,])] == mat[2,]])
#      [,1] [,2] [,3] [,4]
# [1,]    2    1    3    5
# [2,]    5    4    6    7
Run Code Online (Sandbox Code Playgroud)

如果您希望第二行中的最大值具有关联,并且想要删除重复的列,则可以mat2[!duplicated(mat2[,1]),]在这两个命令之后使用.