问题描述
嗨,我希望你做得很好:)
我的原始数据格式如下所述。 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)))