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以下のデータギャップを埋める、私はこのから行きたい:
ためのこの 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
に
row col
[1,] 1 1
[2,] 2 1
[3,] 3 3
[4,] 7 5
[5,] 7 6
[6,] 9 8
[7,] 14 13
を与える
diag_indx <- which(!is.na(ontrack), arr.ind=T)
newV
のようなインスタンスの場合、結果は(2,2)または(3,2)になります。後のコードではdiag_indx
の行列を使用していますが、より効率的であればデータギャップはontrack
行列に直接書き込まれます(任意の値を使用)。溶液をうまくしようとする際に
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)])
}
を用いdiag_indx
マトリクスにおけるデータのギャップを発見した後seq()
を使用して、データのギャップを埋める想定しました。効率的にまとめていく方法がわかりません。ご協力ありがとうございました。