微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将表转换为相互依赖/依赖矩阵

如何解决将表转换为相互依赖/依赖矩阵

嗨,我希望你做得很好:)

我的原始数据格式如下所述。 abc 是公司 t1 t2 是技术


   //T1 T2 T3 T4
   a 1 1 0 1
   b 1 0 1 0
   c 1 1 0 1
   d 0 1 1 1

我想要一个看起来像这样的相互依赖矩阵:


// T1 T2 T3 T4
T1 0  2. 1. 2
T2 2. 0. 1. 3
T3 1  1  0  1
T4 2  3  1. 0 

基本上,我想计算有多少家公司提供了多少相同的技术对(T1-T2 或 T1-T4),这代表了矩阵中的价值。

示例:3 家公司 (a,c,d) 同时提供技术 t2 和 t4

你能告诉我如何在 excel 或 R 中做到这一点:)

解决方法

data <-
  structure(
    list(
      T1 = c(1L,1L,0L),T2 = c(1L,0L,1L),T3 = c(0L,T4 = c(1L,1L)
    ),class = "data.frame",row.names = c(NA,-4L)
  )

m <- as.matrix(data)
res <- crossprod(m,m)
diag(res) <- 0
res
#>    T1 T2 T3 T4
#> T1  0  2  1  2
#> T2  2  0  1  3
#> T3  1  1  0  1
#> T4  2  3  1  0

reprex package (v2.0.0) 于 2021 年 6 月 10 日创建

,

这是在 R 中执行此操作的一种方法 -

count_1s <- function(x,y) sum(df[[x]] == 1 & df[[y]] == 1)
n <- 1:nrow(df)
res <- outer(n,n,Vectorize(count_1s))
diag(res) <- 0
dimnames(res) <- list(colnames(df),colnames(df))
res

#   T1 T2 T3 T4
#T1  0  2  1  2
#T2  2  0  1  3
#T3  1  1  0  1
#T4  2  3  1  0

数据

df <- structure(list(T1 = c(1L,1L)),row.names = c("a","b","c","d"))
,

在 Excel 中,此公式向下复制:

=(COUNTIFS(INDEX($B$2:$E$5,COLUMN(A1)),1,INDEX($B$2:$E$5,ROW(A1)),1)*(ROW(A1)<>COLUMN(A1)))

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。