如何在 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
我有一个类似于下面的大数据矩阵(“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