這個問題很難解釋,但我相信你們中的一些人已經面對過這個問題。R - 檢查有可能滯後的不同矩陣
所以我有兩個矩陣。 矩陣1(墊1)和 黑客帝國2(墊2)
我想要做的是在第三矩陣記錄(MAT3)MAT2的價值,檢查後矩陣1,但帶有LAG。讓我解釋。
在基質1中的值後,我想檢查矩陣2作爲太多,但一定的滯後範圍內,例如,1或2次發作後(列)。
例如,行號4在第6列的矩陣1中具有。 所以我想檢查矩陣2中的第4行是否有一個直接在2或3列之後或之後。
你明白這個主意嗎?
mat1 = structure(c(0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0,
0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0,
1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1,
0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0,
0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1), .Dim = c(10L, 21L), .Dimnames = list(NULL, c("wit5.020",
"wit5.021", "wit5.022", "wit5.023", "wit5.024", "wit5.025", "wit5.026",
"wit5.027", "wit5.028", "wit5.029", "wit5.030", "wit5.031", "wit5.032",
"wit5.033", "wit5.034", "wit5.035", "wit5.036", "wit5.037", "wit5.038",
"wit5.039", "wit5.040")))
mat2 = structure(c(0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0,
0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,
0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0,
1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0,
1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1,
0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0,
0, 1, 0, 1), .Dim = c(10L, 21L))
所以MAT3 - 在這裏我想存儲檢查
mat3 = matrix(0, nrow = nrow(mat1), ncol = ncol(mat1))
所以這裏的結果是爲了檢查LAG可能環 的例子 - 這循環不工作,但它可以給你一個想法的解決方案。 我不確定在哪裏介紹滯後。我想也許在我,但我不知道。
for(j in 1:ncol(mat1)){
for(i in 1:nrow(mat1)){
if(mat1[i,j] == 1 & mat2[i,j] == 1 | mat2[i+1,j] == 1 | mat2[i+2,j] == 1) # lag here
{mat[i,j] <- 1}
else
{mat[i,j] <- 0}
}
}
任何想法都非常受歡迎。
什麼是'mat1.wake'和'mat'? t應分別爲mat1和mat3。另外,如果根據你的描述你想落在列('j')上,你爲什麼會滯後於行('i')?如果你只是遵循你自己的解釋,我相信你可以使這個循環工作。 –
@DavidArenburg對不起* mat1.wake *是* mat1 *!我的錯 – giacomo
無論哪種方式,你可以嘗試vectorise如下,但我不喜歡這種方法太多'indx < - mat1 == 1L; mat3 [indx] < - (mat2 [indx] == 1L)|(cbind(mat2 [, - (1L:2L)], FALSE,FALSE)[indx] == 1L)' –