如果一个善良的灵魂能告诉我如何在R中做到这一点,我将非常感激:
给定具有重复列和行的平方矩阵,例如
1 1 2 2 2 2 3
1 0.000 0.000 0.048 0.048 0.048 0.048 0.059
1 0.000 0.000 0.048 0.048 0.048 0.048 0.059
2 0.048 0.048 0.000 0.000 0.000 0.000 0.059
2 0.048 0.048 0.000 0.000 0.000 0.000 0.059
2 0.048 0.048 0.000 0.000 0.000 0.000 0.059
2 0.048 0.048 0.000 0.000 0.000 0.000 0.059
3 0.059 0.059 0.059 0.059 0.059 0.059 0.000
Run Code Online (Sandbox Code Playgroud)
在相同的col和row名称指定重复项的情况下,我需要具有唯一的col和row名称,同时跟踪原始和重复的cols/rows.就是这样的
1 1a 2 2a 2b 2c 3
1 0.000 0.000 0.048 0.048 0.048 0.048 …Run Code Online (Sandbox Code Playgroud) 我有一个0对角线对称矩阵X,例如
[1] [2] [3] [4] [5]
[1] 0.00000000 0.07065048 0.1019865 0.23641082 0.23641082
[2] 0.07065048 0.00000000 0.0000000 0.23641082 0.23641082
[3] 0.10198654 0.00000000 0.0000000 0.00000000 0.23641082
[4] 0.23641082 0.23641082 0.0000000 0.00000000 0.08870087
[5] 0.23641082 0.23641082 0.2364108 0.08870087 0.00000000
Run Code Online (Sandbox Code Playgroud)
我需要根据第二个矩阵Y用0替换它的一些元素:
[1] [2]
[1] 3 2
[2] 4 3
[3] 1 2
Run Code Online (Sandbox Code Playgroud)
因此X [3,2],X [4,3],X [1,2]和对称性的X [2,3],X [3,4],X [2,1]应该被替换零的.
我想出了这个解决方案:
for (i in 1:nrow(Y)) {
X[Y[i,1], Y[i,2]] <- 0
X[Y[i,2], Y[i,1]] <- 0
}
Run Code Online (Sandbox Code Playgroud)
这是诀窍,但我想知道是否有更好,更有效的方法来使用类似应用的函数进行编码.
非常感谢您的关注.
正如标题所述,我需要根据另一个矩阵 (B) 中给出的列和行名称,将对称矩阵 (A) 中的值替换为 0。例如,
A <-matrix(c(0,1,2,3,4,1,0,1,2,3,2,1,0,1,2,3,2,1,0,3,4,3,2,3,0), 5)
colnames(A) <- rownames(A) <-c(LETTERS[1:5])
A
A B C D E
A 0 1 2 3 4
B 1 0 1 2 3
C 2 1 0 1 2
D 3 2 1 0 3
E 4 3 2 3 0
B <- matrix(c("A","B","C","B","D","E","E","C"),4)
B #reference matrix
[,1] [,2]
[1,] "A" "D"
[2,] "B" "E"
[3,] "C" "E"
[4,] "B" "C"
Run Code Online (Sandbox Code Playgroud)
我试过
A[B[,1],B[,2]]<-0 #for the above-diagonal half but it didn't work as …Run Code Online (Sandbox Code Playgroud) 设A是n*n对角矩阵.说,n = 5:
A <- diag(1, 5)
A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 0 1 0 0 0
[3,] 0 0 1 0 0
[4,] 0 0 0 1 0
[5,] 0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
我需要A按行随机化,让1离开对角线.我想出了这个解决方案:
n <- 5
count <- c(1:n)
for (i in count) {
while (A[count[i], count[i]] == 1) { #avoid 1 in diagonal
A[count[i],] <- sample(A[count[i],]) #permutes ith row
}
}
Run Code Online (Sandbox Code Playgroud)
但我很确定应该有一种更有效的方法来做到这一点.感谢您的关注.
我很难弄清楚如何在 R 中对其进行编程:给定许多 X 和 Y 对,例如
X Y
9 1
1 2
12 3
8 4
9 4
4 5
16 6
18 7
5 8
11 9
4 10
6 11
6 12
14 13
18 13
20 13
13 14
20 15
20 16
Run Code Online (Sandbox Code Playgroud)
我需要随机抽取 n 对满足 X 和 Y 唯一的条件。例如,如果n=3并使用上述数据,则以下组合 (9,1) (4,5) (4,10) 或 (1,2) (14,13) (20,13) 将无效因为 X=4 或 Y=13 在每个解决方案中都是重复的。然而,(9,1) (1,2) 和 (8,4) 将是有效的解,因为 X 和 Y 是唯一的。任何帮助都会受到欢迎。