Меня немного смущает вывод здесь, так как если подсчитываются только строки с одной единицей в них, то итоговая матрица будет иметь только элементы по диагонали. Другими словами, было бы лучше возвращать вектор, чем матрицу.
Вы также говорите в своем вопросе, что M
должен быть 1, поскольку он появляется сам по себе только один раз. На самом деле он появляется сам по себе дважды (строка 5 и строка 9).
Вы можете получить нужный результат, удалив все строки с суммой строк более одной, а затем взяв суммы столбцов:
colSums(as.matrix(order_df[rowSums(order_df) == 1,]))
#> H M B FB
#> 0 2 1 0
и если вы внимательно проверите, это правильно.
Если вам действительно нужен результат в матрице, просто удалите строки с более чем одним значением и возьмите перекрестное произведение этого:
crossprod(as.matrix(order_df[rowSums(order_df) == 1,]))
#> H M B FB
#> H 0 0 0 0
#> M 0 2 0 0
#> B 0 0 1 0
#> FB 0 0 0 0