[英]R: assigning values to a new matrix based on value and coordinate in another matrix
我有一個對稱矩陣m1
,我想根據m1
中的值和位置創建第二個矩陣m2
。
例如(為糟糕的偽代碼道歉):
> m1
[,1] [,2] [,3] [,4] [,5]
[1,] 0 1 2 3 4
[2,] 1 0 5 6 7
[3,] 2 5 0 8 1
[4,] 3 6 8 0 9
[5,] 4 7 1 9 0
如果值在 position(x1-3 和 y4-5)或(x4-5 和 y1-3)中,並且如果值本身 >2,則為“A”,否則如果它在這些位置但 <3,則“B”,否則如果是 (x1-3 和 y1-3) 或 (x4-5 和 y4-5) 且 >2 則為“C”,否則為“D”。 如果可能的話,忽略對角線。
以便:
> m2
[,1] [,2] [,3] [,4] [,5]
[1,] NA D D A A
[2,] D NA C A A
[3,] D C NA A B
[4,] A A A NA C
[5,] A A B C NA
無論position如何,我都可以對所有值使用m2 <- ifelse(m1 >2, "A", "B")
,但我對如何僅針對某些位置執行此操作感到困惑。 我也嘗試過像m1[1:3,4:5]
這樣的嵌套 if 語句,但無法讓它工作。
你可以試試下面的代碼
idxc <- col(m1)
idxr <- row(m1)
msk <- idxr %in% 1:3 & idxc %in% 1:3 | idxr %in% 4:5 & idxc %in% 4:5
m1[msk] <- ifelse(m1>2,"C","D")[msk]
m1[!msk] <- ifelse(m1>2,"A","B")[!msk]
m2 <- `diag<-`(m1,NA)
這使
> m2
[,1] [,2] [,3] [,4] [,5]
[1,] NA "D" "D" "A" "A"
[2,] "D" NA "C" "A" "A"
[3,] "D" "C" NA "A" "B"
[4,] "A" "A" "A" NA "C"
[5,] "A" "A" "B" "C" NA
數據
> dput(m1)
structure(c(0L, 1L, 2L, 3L, 4L, 1L, 0L, 5L, 6L, 7L, 2L, 5L, 0L,
8L, 1L, 3L, 6L, 8L, 0L, 9L, 4L, 7L, 1L, 9L, 0L), .Dim = c(5L,
5L))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.