Предположим, что входная матрица m
соответствует воспроизводимой в примечании в конце - преобразуйте ее в матрицу, если это фрейм данных с использованием as.matrix
.
Теперь создайте матрицу такой же формы, как и m
, только с буквами, поэтому теперь lets
содержит буквы, а m
содержит цифры.Затем вставьте буквы и цифры вместе и замените те ячейки, для которых число равно нулю, пустой строкой.Также замените все ячейки, для которых число равно 1, только буквой.Наконец, вставьте каждый ряд вместе.Пакеты не используются и циклы или * apply не используются.
lets <- t(replace(t(m), TRUE, colnames(m)))
mm <- paste0(lets, m)
mm <- replace(mm, m == 0, "")
mm <- ifelse(m == 1, lets, mm)
do.call("paste0", as.data.frame(mm))
## [1] "C5H5" "C6H4NS" "C4H6N2O"
Примечание
входная матрица m
в воспроизводимом виде предполагается:
m <- matrix(c(5, 6, 4, 5, 4, 6, 0, 1, 2, 0, 0, 1, 0, 1, 0), 3, 5,
dimnames = list(NULL, c("C", "H", "N", "O", "S")))