如何在 r 中创建相似度矩阵?
Posted
技术标签:
【中文标题】如何在 r 中创建相似度矩阵?【英文标题】:How do I create similarity matrices in r? 【发布时间】:2022-01-12 07:11:47 【问题描述】:我有一个矩阵,其中的行是立法者,列是问题,以及指示立法者如何对给定问题进行投票的值(0 - 缺席,1 - 支持,2 - 反对)。我需要为每个问题创建一个相似性矩阵(如果两位立法者都出席投票,他们是否以相同的方式投票)。在 r 中是否有不使用嵌套 for 循环的快速方法?
这是矩阵的样子:
I1 I2 I3 I4
L1 1 1 1 2
L2 1 1 0 0
L3 2 2 2 2
L4 2 2 0 0
这是我想为第一期获得的内容:
L1 L2 L3 L4
L1 1 0 0
L2 1 0 0
L3 0 0 1
L4 0 0 1
【问题讨论】:
【参考方案1】:你可以试试
func <- function(a, b) ifelse(a==b & a*b != 0, 1, 0)
lapply(dummy, function(x)
res <-outer(x, x, func)
diag(res) <- NA
colnames(res) = rownames(res) = c("L1", "L2", "L3", "L4")
res
)
$I1
L1 L2 L3 L4
L1 NA 1 0 0
L2 1 NA 0 0
L3 0 0 NA 1
L4 0 0 1 NA
$I2
L1 L2 L3 L4
L1 NA 1 0 0
L2 1 NA 0 0
L3 0 0 NA 1
L4 0 0 1 NA
$I3
L1 L2 L3 L4
L1 NA 0 0 0
L2 0 NA 0 0
L3 0 0 NA 0
L4 0 0 0 NA
$I4
L1 L2 L3 L4
L1 NA 0 1 0
L2 0 NA 0 0
L3 1 0 NA 0
L4 0 0 0 NA
数据
dummy <- read.table(text = " I1 I2 I3 I4
1 1 1 2
1 1 0 0
2 2 2 2
2 2 0 0", header = T)
rownames(dummy) <- c("L1", "L2", "L3", "L4")
I1 I2 I3 I4
L1 1 1 1 2
L2 1 1 0 0
L3 2 2 2 2
L4 2 2 0 0
【讨论】:
这与预期的输出不相似 @Onyambu 有问题的预期输出是$I1
。我想我错过了行/列名。
您能指定虚拟对象吗?
@snitsova 这是你的矩阵。我在上面添加代码。
@Park 我明白了。虚拟对象的类是一个数据框。谢谢!以上是关于如何在 r 中创建相似度矩阵?的主要内容,如果未能解决你的问题,请参考以下文章