如何在 r 中创建相似度矩阵?
How do I create similarity matrices in r?
我有一个矩阵,行是立法者,列是问题,值表示立法者如何对给定问题进行投票(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
你可以试试
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
我有一个矩阵,行是立法者,列是问题,值表示立法者如何对给定问题进行投票(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
你可以试试
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