When you said the column means where 10, 14 and 30, I take you meant the column sums.
df <- structure(list(Date = structure(1:3, .Label = c("27/8/2019", "28/8/2019", "29/8/2019"),
class = "factor"),
ColA = c(5, 4, 1), ColB = c(6, 6, 2), ColC = c(10, 10, 10)),
class = "data.frame", row.names = c(NA, -3L))
SUMS <- colSums(df[,2:4])
t(outer(c(ColA = 1, ColB = 1,ColC = 1), SUMS)/SUMS)
#> ColA ColB ColC
#> ColA 1.0 0.7142857 0.3333333
#> ColB 1.4 1.0000000 0.4666667
#> ColC 3.0 2.1428571 1.0000000
Created on 2019-10-15 by the reprex package (v0.3.0.9000)
Edited - Explanation of a less silly way to do this.
It is obvious from the way you laid out your question that you needed to take your three column sums and make a 3x3 matrix containing all possible ways to divide the three values. The outer product function takes vectors of length n and m and makes a n x m matrix, so I knew I could use it and a vector of ones to make matrices of the three values. Changing the order of the arguments in the outer product "rotates" the result. You can get all combinations of the ratios by dividing the two matrices produced by outer().
The less silly way:
df <- structure(list(Date = structure(1:3, .Label = c("27/8/2019", "28/8/2019", "29/8/2019"),
class = "factor"),
ColA = c(5, 4, 1), ColB = c(6, 6, 2), ColC = c(10, 10, 10)),
class = "data.frame", row.names = c(NA, -3L))
SUMS <- colSums(df[,2:4])
SUMS
#> ColA ColB ColC
#> 10 14 30
vecOf1 <- c(ColA = 1, ColB = 1,ColC = 1)
vecOf1
#> ColA ColB ColC
#> 1 1 1
Numerator <- outer(SUMS, vecOf1)
Numerator
#> ColA ColB ColC
#> ColA 10 10 10
#> ColB 14 14 14
#> ColC 30 30 30
Denominator <- outer(vecOf1, SUMS)
Denominator
#> ColA ColB ColC
#> ColA 10 14 30
#> ColB 10 14 30
#> ColC 10 14 30
Numerator/Denominator
#> ColA ColB ColC
#> ColA 1.0 0.7142857 0.3333333
#> ColB 1.4 1.0000000 0.4666667
#> ColC 3.0 2.1428571 1.0000000
Created on 2019-10-15 by the reprex package (v0.2.1)