如何向数组添加连续序列(唯一标识符)?

时间:2019-03-05 18:13:37

标签: arrays r

我有一个类似于此的数组:

ar1<- array(rep(1, 91*5*4), dim=c(91, 5, 4))

我想在每个组件的末尾添加一个额外的列(n = 4),该列在所有组件之间是连续的(我不确定组件是否是正确的词)。

在这种情况下,它将是一个从1到364的序列。

其背后的想法是,如果在我弄乱联接数据或其他任何东西时,这些行被打乱了,我将能够看到并纠正它。

请问我该如何实现?

1 个答案:

答案 0 :(得分:0)

以下可能是您想要的。
它使用apply向由数组第二维定义的每个切片添加额外的列,并在此之后正确设置最终维。

ar2 <- sapply(1:5, function(i){
  new <- seq_len(NROW(ar1[, i, ])) + (i - 1)*NROW(ar1[, i, ])
  cbind(ar1[, i, ], new)
})
dim(ar2) <- c(91, 5, 5)

上面的代码创建了一个新数组,如果需要,您可以重写原始数组。
要取回原件,可以这样做。

n <- dim(ar2)[2]
ar1_back <- sapply(1:5, function(i){
  ar2[, -n, i]
})
dim(ar1_back) <- c(91, 5, 4)
identical(ar1, ar1_back)
#[1] TRUE