Мы можем использовать outer
out <- outer(row.names(m1), colnames(m1), `==`)
dimnames(out) <- dimnames(m1)
out
# 1 2 3 4
#1 TRUE FALSE FALSE FALSE
#3 FALSE FALSE TRUE FALSE
#4 FALSE FALSE FALSE TRUE
или rep
разрешить имена строк и столбцов, чтобы сделать равными length
s, а затем выполнить ==
`dim<-`(row.names(m1)[row(m1)] == colnames(m1)[col(m1)], dim(m1))
ПРИМЕЧАНИЕ: как предложено @NelsonGon, когда мы читаем данные (read.table/read.csv
и т. Д.) Как data.frame
, к именам столбцов может добавляться префикс X
, так как это неканонические имена, то есть начинающиеся с цифры. Чтобы избежать этого, используйте аргумент check.names = FALSE
в read.table/read.csv
или пост-процесс, изменив имена столбцов
outer(row.names(df), sub("^X","",names(df)),"==")
при условии, что 'df' является объектом идентификатора data.frame
данные
m1 <- structure(list(`1` = c(0.4966143, 0.7002979, 0.7406555),
`2` = c(0.835929, 0.8621343, 0.8371479),
`3` = c(0.7319204, 0.5152356, 0.7103873),
`4` = c(0.7579902, 0.7875813, 0.55302)),
class = "data.frame",
row.names = c("1", "3", "4"))