Мы можем использовать outer
outer(d$`%`, d$`%`, `/`)
Мы можем добавить к нему имена строк и столбцов.
matrix(outer(d$`%`, d$`%`, `/`), nrow(d), dimnames = list(d$`%`, d$`%`))
# 3 10 5
#3 1.00 0.3 0.6
#10 3.33 1.0 2.0
#5 1.67 0.5 1.0
данные
d <- structure(list(x = structure(1:3, .Label = c("a", "b", "c"), class = "factor"),
`%` = c(3L, 10L, 5L)), class = "data.frame", row.names = c(NA, -3L))