开发者社区> 问答> 正文

使用diag将仅具有唯一比较的长格式转换为全方阵

假设我有这种输入数据,一个文件是一个data.frame文件,其中的数据格式很长,只有Species_A和Species_B之间的唯一性比较如下:

Species_A Species_B values
A B 58
A C 64
A D 78
A E 32
B C 10
B D 12
B E 54
C D 99
C E 84
D E 42

我想知道如何轻松地将输入文件转换为方矩阵

A   B   C   D   E
A   100 58  64  78  32
B   58  100 10  12  54
C   64  10  100 99  84
D   78  12  99  100 42
E   32  54  84  42  100

展开
收起
游客ufivfoddcd53c 2020-01-04 11:37:15 872 0
1 条回答
写回答
取消 提交回答
  • 使用tidyverse函数的解决方案 :

    library(tidyverse)
    
    cor_data <- tribble(
    ~Species_A, ~Species_B, ~values,
    "A","B",58,
    "A","C",64,
    "A","D",78,
    "A","E",32,
    "B","C",10,
    "B","D",12,
    "B","E",54,
    "C","D",99,
    "C","E",84,
    "D","E",42)
    
    expand.grid(unique(cor_data[["Species_A"]]), unique(cor_data[["Species_A"]])) %>% 
      left_join(cor_data, by =c("Var1" = "Species_A", "Var2" = "Species_B")) %>% 
      left_join(cor_data, by =c("Var1" = "Species_B", "Var2" = "Species_A")) %>% 
      transmute(Species_A = Var1, Species_B = Var2, values = coalesce(values.x, values.y)) %>% 
      spread(Species_B, values)
    
    2020-01-04 11:37:41
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载