3
我正在處理一些大矩陣,其值與對角線類似,如下所示。R - 沿矩陣對角線填充長度爲'n'或更小的數據間隙
ontrack <- matrix(c(
runif(1),NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
runif(1),NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,runif(1),NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,runif(1),runif(1),NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,runif(1),NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,NA,runif(1)),
nrow=14, byrow=T
)
我想填充長度'n'或更小的數據間隙來連接對角線段。使用例如上述矩陣和在3個或更少的數據填補空白,我想從這個去:
diag_indx <- which(!is.na(ontrack), arr.ind=T)
其給出
row col
[1,] 1 1
[2,] 2 1
[3,] 3 3
[4,] 7 5
[5,] 7 6
[6,] 9 8
[7,] 14 13
此
row col
1 1
2 1
newV 3 2
3 3
new 4 4
new 5 4
new 6 4
7 5
7 6
new 8 7
9 8
14 13
對於例如newV
,結果可以是(2,2)或(3,2)。我的後續代碼使用diag_indx
矩陣,但如果效率更高,則數據間隙可以直接填充到ontrack
矩陣中(使用任何值都可以)。
在試圖找出一個解決方案,我發現預想在diag_indx
矩陣中的數據間隙使用該sequence length equation
seqle <- function(x, incr=1) {
if(!is.integer(x)) x <- as.integer(x)
n <- length(x)
y <- x[-1L] != x[-n] + incr
i <- c(which(y|is.na(y)),n)
list(lengths = diff(c(0L,i)),
values = x[head(c(0L,i)+1L,-1L)])
}
,然後在數據缺口使用seq()
填充。我只是不確定如何有效地把它放在一起。感謝您的幫助。