Вот опция, использующая xtabs
. Преобразуйте первые два столбца в factor
с levels
, указанным в том порядке, который мы хотим получить в выходных данных. Затем используйте xtabs
, чтобы получить matrix
вывод, транспонируйте вывод и добавьте к исходной матрице, чтобы получить ожидаемый вывод
dat[1:2] <- lapply(dat[1:2], factor, levels = c("A", "B", "C", "D", "L"))
out <- xtabs(Count ~ Var1 + Var2, dat)
out + t(out)
# Var2
#Var1 A B C D L
# A 0 3 4 10 6
# B 3 0 0 0 0
# C 4 0 0 0 0
# D 10 0 0 0 0
# L 6 0 0 0 0
данные
dat <- structure(list(Var1 = c("A", "A", "A", "A"), Var2 = c("B", "C",
"D", "L"), Count = c(3L, 4L, 10L, 6L)), class = "data.frame",
row.names = c(NA, -4L))