xtabs
может использоваться для получения данных в нужной форме - также имеется приятная функция, позволяющая указывать результат в виде разреженной матрицы (у вас (nrow(dat)/696^2
)
dat <- read.csv("https://pastebin.com/raw/xpGMsSSf")
# setting to factor introduces factor levels that are not found in the data
# see below for what is being done
dat[c("V1", "V2")] <- lapply(dat[c("V1", "V2")], factor, levels=1:696)
out <- xtabs( N ~ V1 + V2, dat, sparse=TRUE)
out[1:5, 1:5]
# To make symmetric
library(Matrix)
out[lower.tri(out)] <- t(out)[lower.tri(out)]
# Explanation of setting common factor levels
# example
x = c(1,2,3)
y = c(1,4,5)
table(x, y)
# but if we want both row and columns of table to include 1 to 5
# we can set to factor
x = factor(x, levels=1:5)
y = factor(y, levels=1:5)
table(x, y)
dput(head(mat))
structure(list(V1 = c(16L, 16L, 17L, 29L, 16L, 17L), V2 = c(17L,
30L, 30L, 30L, 29L, 29L), N = c(0.065532029, 0.070163826, 0.053089888,
0.068024596, 0.053083392, 0.041870099)), .Names = c("V1", "V2",
"N"), row.names = c(NA, 6L), class = "data.frame")