如果我有这个矩阵(mat
):
set.seed(140213)
mat <- matrix(runif(16,0,1),nrow = 4)
colnames(mat) <- 1:4
rownames(mat) <- 5:8
#> mat
# 1 2 3 4
#5 0.1120015 0.01454408 0.3411633 0.3456254
#6 0.5709174 0.70443202 0.9114756 0.9157580
#7 0.1500032 0.40889119 0.6231543 0.9736331
#8 0.9773827 0.45136413 0.9706694 0.5022132
对于每一行,我可以得到两个最低列的:
namesmat <- t(apply(mat, 1, function(x)
head(names(x)[order(x, decreasing = FALSE)], 2)))
# [,1] [,2]
#5 "2" "1"
#6 "1" "2"
#7 "1" "2"
#8 "2" "4"
现在我的问题是:
如果我有另一个矩阵 ( mat2
)
set.seed(14022013) ; mat2 <- matrix(runif(16,0,1),nrow = 4)
我怎样才能像以前一样为每列获取最低mat2
的两行,但忽略我已经从中选择的列mat
。
例如,如果mat2
在行的最高列中,5
则cols 3 & 1
必须选择最高的嵌套。如果下一个最高的是“col 2”,我将不得不选择下一个最高的。如果不清楚,请告诉我。
mat2
我的脑袋想使用类似的方法进行某种配对应用namesmat
:
t(apply(mat, 1, function(x) head(
names(x)[order(x[! names(x) == apply(namesmat,1,c)] ,
decreasing = FALSE)], 2)))
我将在许多垫子上这样做。mat2
选择取决于mat
选择。然后我将有一个mat3
并且每行最低列的选择将取决于选择mat
和mat2
组合,因此忽略已经选择的所有行mat
并mat2
继续几个垫子。
显然在这种情况下只有 4 列,所以我只能执行此序列两次。