1

我有一个类似于下面的大数据矩阵(“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 值,但无法找到使用这些向量的直接方法。)

建议表示赞赏。

4

1 回答 1

0

您可以用零临时替换 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
于 2015-02-24T18:22:36.243 回答