Вы можете воспользоваться неявной векторизацией в R для запуска всей матрицы m1 относительно столбцов m2. Вам просто нужно получить м2, чтобы повторять столбцы путем поднабора одного и того же столбца снова и снова. Например, v <-c("A","B","C")
вы можете сделать v[c(1,1,2,2,3,3)]
, что равно "A","A","B","B","C","C"
.
Проверьте следующий код и дайте мне знать, если у вас есть какие-либо вопросы:
# we want to compare m1[,c(1,2,3,...)], with m2[,c(1,1,1,...)]
# summing 1,0,...,1,0,... to get 1,1,...,2,2,...
m2_to_compare <- cumsum(rep(c(1,rep(0,19)),10))
# length should match m1 columns
length(m2_to_compare)
(m1 < m2[,m2_to_compare]) * 1 # turns TRUEs and FALSEs into 1s and 0s
Ответ на комментарий:
cc = ifelse(m1 < m2[,m2_to_compare], 1, 0)
# depending on your seed:
sapply(1:10, function(colm) rowSums(cc[,m2_to_compare == colm]))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
# [1,] 3 1 19 8 9 11 17 2 12 16
# [2,] 2 19 14 10 10 11 9 1 0 14
# [3,] 16 16 17 7 5 20 1 16 2 17
# [4,] 13 2 0 11 20 11 6 5 12 2
# [5,] 0 10 2 1 10 17 3 14 5 7
# [6,] 11 7 17 9 20 18 18 16 7 4
# [7,] 15 3 5 5 8 5 3 3 9 1
# [8,] 0 18 5 8 9 15 9 17 0 20
# [9,] 15 14 5 1 5 0 6 17 19 6
#[10,] 6 1 4 10 11 12 0 9 7 5