Я думаю, что это то, что вы описываете:
# Make some toy data
set.seed(1)
n <- 1000
age <- rnbinom(n = n, size = 25, prob = 0.5)
job <- sample(LETTERS[1:5], size = n, replace = TRUE)
tab <- table(age, job)
head(tab)
# job
#age A B C D E
# 7 0 0 0 0 1
# 8 0 0 0 0 1
# 9 0 0 0 2 1
# 10 1 0 1 1 0
# 11 2 1 1 0 1
# 12 2 4 0 3 1
# Sort each column indiviually, and get corresponding groups in the rows
out <- sapply(1:ncol(tab),
function(i) rownames(tab)[order(tab[, i], decreasing = TRUE)])
colnames(out) <- colnames(tab)
head(out)
# A B C D E
#[1,] "24" "28" "19" "23" "23"
#[2,] "20" "18" "22" "27" "24"
#[3,] "27" "21" "18" "17" "22"
#[4,] "18" "17" "31" "25" "26"
#[5,] "25" "26" "27" "29" "21"
#[6,] "29" "19" "16" "18" "25"
# If you need it to be numeric
class(out) <- "numeric"
head(out)
# A B C D E
#[1,] 24 28 19 23 23
#[2,] 20 18 22 27 24
#[3,] 27 21 18 17 22
#[4,] 18 17 31 25 26
#[5,] 25 26 27 29 21
#[6,] 29 19 16 18 25
Теперь вы должны знать, что потеряете связь между строками в исходной таблице. Первая строка - это просто самая частая группа в этом столбце, вторая строка - вторая самая частая группа в данном столбце и т. Д.