我有一个类似于下面的大数据矩阵(“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
显然,第2列的起始值(“xi”)必须从第3行(或4?)开始应用。我在真实矩阵中有许多列,其中一些有领先的NA,有些没有。我需要在重建中保留领先的NA。我无法想出一种简单的方法,可以用简单的方式在差分矩阵中重建具有NA的列。
(对于每一列,我能够构造两个向量,一个包含第一个非NA行,另一个包含第一个NA值,但无法找到一种直接使用它们的方法。)
建议表示赞赏。
答案 0 :(得分:0)
您可以暂时用零替换NAs:
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