Можно использовать mapply
для одновременной итерации по столбцам матрицы и элементам list(A, B, C)
mapply(function(col, vec) +(col %in% vec), as.data.frame(mat), list(A, B, C))
# A B C
#[1,] 0 1 0
#[2,] 0 0 1
#[3,] 1 0 0
#[4,] 1 0 0
#[5,] 0 0 0
#[6,] 0 1 1
#[7,] 0 1 0
#[8,] 1 0 1
Объяснение: col %in% vec
проверяет соответствие записей из vec
ввектор столбца матрицы. Унарный оператор +
преобразует TRUE
/ FALSE
в 1
/ 0
.
Или даже короче (спасибо @thelatemail)
+mapply(`%in%`, as.data.frame(mat), list(A, B, C))
Пример данных
A <- c("G", "C", "K")
B <- c("S", "B", "A")
C <- c("A", "M", "C")
mat <- matrix(c(
"T", "Y", "G", "C", "S", "M", "S", "K",
"S", "N", "U", "Z", "D", "A", "B", "J",
"R", "C", "N", "Q", "K", "M", "F", "A"),
ncol = 3)
colnames(mat) <- c("A", "B", "C")