首页 > 解决方案 > R中矩阵的可视化

问题描述

我对 R 很陌生。我想从示例输入中创建一个矩阵(?)/可视化:

         x
V1_V2   16
V1_V3   16
V1_V4   24
V2_V3   36
V2_V4    8
V3_V4    0

输出将如下所示:

   V1 V2 V3 V4
V1  0 16 16 24
V2 16 0  36  8
V3 16 36  0  0
V4 24  8  0  0

输出可以以任何形式完成,只要它像上面那样表示。

dput() 如下所示。

c(V1_V2 = 16, V1_V3 = 16, V1_V4 = 24, V1_V4 = 36, V2_V3 = 36, 
V2_V4 = 0, V3_V4 = 0) 

创建当前输入的公式如下:

result <- do.call(cbind, combn(names(df_trial), 2, function(x) {
  setNames(data.frame(as.integer(df_trial[[x[1]]] == df_trial[[x[2]]])), paste0(x, collapse = '_'))
}, simplify = FALSE))

我将不胜感激任何建议!

标签: rmatrixvisualization

解决方案


假使,假设

  1. 您的预期输出是对称矩阵;和
  2. 您的数据看起来像本文开头显示的数据,而不是dput具有重复名称的数据。

那你可以试试这个功能

matrix_display <- function(key, val) {
    key <- strsplit(key, "_")
    nms <- unique(unlist(key))
    n <- length(nms)
    mat <- matrix(0, n, n, dimnames = list(nms, nms))
    for (i in seq_along(val)) {
      mat[key[[i]][[1L]], key[[i]][[2L]]] <- val[[i]]
      mat[key[[i]][[2L]], key[[i]][[1L]]] <- val[[i]]
    }
    mat
  }

如果你input_data是一个数据框,并且keys是行名,那么

matrix_display(row.names(input_data), input_data$x)

否则,如果您input_data是命名向量,则

matrix_display(names(input_data), input_data)

输出应如下所示

   V1 V2 V3 V4
V1  0 16 16 24
V2 16  0 36  8
V3 16 36  0  0
V4 24  8  0  0

推荐阅读