r - 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))
我将不胜感激任何建议!
解决方案
假使,假设
- 您的预期输出是对称矩阵;和
- 您的数据看起来像本文开头显示的数据,而不是
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
推荐阅读
- perl - 在perl中用空格替换非数字字符的更简单方法是什么?
- amazon-web-services - Cloudformation - 将多个堆栈连接在一起
- firebase - 如何计算 Firestore 集合中所有文档的特定字段的总和 | 镖
- python-3.x - python中的标准化双引号,单引号和撇号
- python-3.x - 使用频率表示法以月为单位的 pandas 时间序列偏移
- asp.net-mvc - C# 和 Vue.js 中的模型和数据注释
- cloud - 我应该如何构建一个无限大小的本地存储?
- javascript - 为什么我不能在本地使用所有令人敬畏的字体图标?
- c++ - UTF8 编码的 cstring 字节长度
- swift4 - 通过在 Swift 4 中将鼠标悬停在其上来返回 NSTableView 的行索引