我有以下矩阵:
[,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中有一个简单的方法吗?
谢谢
您可以计算每个第一行元素的最大第二行值,然后只保留第二行是第一行中元素的最大值的列:
(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]),]在这两个命令之后使用.