У меня есть матрица значений с тысячами строк и несколькими десятками столбцов. Для данной строки, $$ R_0 $$, я хотел бы найти все остальные дополнительные строки. Дополнительная строка определяется как:
- если заданная строка имеет ненулевое значение для столбца, то дополнение должно иметь нулевое значение для этого столбца
- сумма элементов данной строки и ее дополнений должна быть меньше 1,0
Для иллюстрации приведу игрушечную матрицу:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 0 0 0.1816416 0 0.1796779
[2,] 0.1889351 0 0 0 0 0
[3,] 0 0 0.1539683 0 0 0.1983812
[4,] 0 0.155489 0.1869410 0 0 0
[5,] 0 0 0 0 0.1739382 0
Для строки 1 имеются значения для столбцов 4 и 6. Дополнительная строка должна иметь «0» для столбцов 4 и 6.
Я не знаю, какой структурой данных должен быть мой желаемый вывод. Но я знаю, что вывод должен сказать мне:
- строка 1 имеет следующие дополнительные строки: 2, 3, 5
- строка 2 имеет следующие дополнительные строки: 1, 3, 4, 5
- строка 3 имеет следующие дополнительные строки: 2, 5
- строка 4 имеет следующие дополнительные строки: 1, 2, 5
- строка 5 имеет следующие дополнительные строки: 1, 2, 3, 4
Возможно, список списков? I.e.:
[1: 2, 3, 5;
2: 1, 3, 4, 5;
3: 2, 5;
4: 1, 2, 5;
5: 1, 2, 3, 4]
Но я открыт для других структур данных.
Следующий код генерирует игрушечную матрицу выше.
set.seed(1)
a = runif(n=30, min=0, max=0.2)
a[a<0.15] = 0
A = matrix(a, # the data elements
nrow=5, # number of rows
ncol=6, # number of columns
byrow = TRUE) # fill matrix by rows
Есть ли какой-то пакет или умный способ решить эту проблему?