如何在 R 中使用 diffinv 重建具有领先 NA 的 diff 数据?

How to reconstruct diff data with leading NAs using diffinv in R?

我有一个类似于下面的大数据矩阵(“trial.matrix”)。

         [,1] [,2]
[1,]    3   NA
[2,]    5   NA
[3,]    7   NA
[4,]    9   10
[5,]   11   12
[6,]   13   14

我的问题要求我打乱这个矩阵的差异版本的一些行,然后从打乱的差异矩阵重建一个矩阵。当我应用 diff(trial.matrix) 我得到:

    [,1] [,2]
[1,]    2   NA
[2,]    2   NA
[3,]    2   NA
[4,]    2    2
[5,]    2    2

要重建原始数据框,我需要使用 cumsum() 或 diffinv(),例如:

new.df <- diffinv(diff(trial.matrix), xi = t(c(3, 10)))

但这给出了:

     [,1] [,2]
[1,]    3   10
[2,]    5   NA
[3,]    7   NA
[4,]    9   NA
[5,]   11   NA
[6,]   13   NA

显然,必须从第 3 行(或第 4 行?)开始应用第 2 列的起始值(“xi”)。我在真实矩阵中有许多列,有些列有前导 NA,有些没有。我需要在重建中保留领先的 NA。我想不出一种简单的方法来直接重建差分矩阵中带有 NA 的列。

(对于每一列,我能够构建两个向量,一个包含第一个非 NA 行,另一个包含第一个 NA 值,但无法找到使用它们的直接方法。)

感谢建议。

您可以暂时将 NA 替换为零:

trial.matrix <- matrix(c(seq(3,13,by=2),rep(NA,3),10,12,14),ncol=2)

xi <- apply(trial.matrix,2,function(cl) cl[which(!is.na(cl))[1]])

z2 <- diff(trial.matrix)

# temporarily replace NAs in the second column by zeroes:
nas <- which(is.na(z2[,2]))
z2[nas,2] <- 0

new.df <- diffinv(z2,xi = t(xi))

# return NAs
new.df[nas,2] <- NA

#      [,1] [,2]
# [1,]    3   NA
# [2,]    5   NA
# [3,]    7   NA
# [4,]    9   10
# [5,]   11   12
# [6,]   13   14