Используя входную матрицу m
, определенно воспроизводимую в примечании в конце, если мы умножим ее на матрицу 1: 2, что равносильно умножению каждой строки на 1: 2, что дает вектор такой же длины, что и числострок, так что каждый элемент равен 0, если в этой строке нет значений ИСТИНА, 1, если в первом столбце этой строки есть значение ИСТИНА, и 2, если во втором столбце этой строки есть значение ИСТИНА.Добавьте к этому 1 и индекс в 3-кортеж, первый элемент которого - NA, а последующие элементы - имена столбцов.
c(NA, colnames(m))[m %*% 1:2 + 1]
## [1] NA "1x2x24" "2x2x24" "1x2x24" "2x2x24" "1x2x24" "2x2x24" "1x2x24"
## [9] "2x2x24"
В качестве альтернативы мы можем использовать те же вычисления, но использовать их для определения коэффициента, который мы конвертируемв строку символов:
as.character(factor(m %*% 1:2 + 1, lab = c(NA, colnames(m))))
Если окажется, что в строке можно иметь два ИСТИННЫХ значения, то для таких строк вычисление дает 4, поэтому просто замените c(NA, colnames(m))
на c(NA, colnames(m), "both")
, скажем,.
Примечание
m <- structure(c(FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE,
FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE
), .Dim = c(9L, 2L), .Dimnames = list(c("[1,]", "[2,]", "[3,]",
"[4,]", "[5,]", "[6,]", "[7,]", "[8,]", "[9,]"), c("1x2x24",
"2x2x24")))