使用R?

时间:2018-12-29 20:00:59

标签: r matrix

与所有相关矩阵一样,此相关矩阵在 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 的单元格相同的值。

如何识别这些对应的或相互的细胞?

我问,因为我试图识别网络数据中的对。社交网络数据通常存储在邻接矩阵中,该矩阵中的单元格表示关系的存在(或大小)。

有一些简单的方法吗?

1 个答案:

答案 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