与所有相关矩阵一样,此相关矩阵在 R 中具有相应的元素:
m <- mtcars[, c("mpg", "cyl", "disp")]
cor(m)
#> mpg cyl disp
#> mpg 1.0000000 -0.8521620 -0.8475514
#> cyl -0.8521620 1.0000000 0.9020329
#> disp -0.8475514 0.9020329 1.0000000
即, cyl,mpg 的单元格具有与 mpg,cyl 的单元格相同的值。
如何识别这些对应的或相互的细胞?
我问,因为我试图识别网络数据中的对。社交网络数据通常存储在邻接矩阵中,该矩阵中的单元格表示关系的存在(或大小)。
有一些简单的方法吗?
答案 0 :(得分:2)
1)这是使用outer
out <- outer(1:4, 1:4, paste, sep = "-")
out[upper.tri(out)] <- sub("(\\d+)-(\\d+)", "\\2-\\1", out[upper.tri(out)])
out
# [,1] [,2] [,3] [,4]
#[1,] "1-1" "2-1" "3-1" "4-1"
#[2,] "2-1" "2-2" "3-2" "4-2"
#[3,] "3-1" "3-2" "3-3" "4-3"
#[4,] "4-1" "4-2" "4-3" "4-4"
2),但这是一种更快的方法。
fun <- function(dims, fill = NA) {
mat <- matrix(fill, nrow = dims, ncol = dims)
mat[upper.tri(mat)] <- seq_len(sum(upper.tri(mat)))
pmax(mat, t(mat), na.rm = TRUE)
}
fun(4, fill = 0L)
# [,1] [,2] [,3] [,4]
#[1,] 0 1 2 4
#[2,] 1 0 3 5
#[3,] 2 3 0 6
#[4,] 4 5 6 0