有没有一种方法可以检查R中向量的索引限制?

时间:2020-10-31 09:16:00

标签: r vector indexing

我有一个包含20个元素的简单向量,其中所有值均为NA。

a = rep(NA, 20)

在某些特定的时间间隔内,我为2分配了一些NA值。

a[c(1, 8, 15, 20)] = 2

现在,我想在值2到3之后分配所有值。下面的语句可以正常工作,但是它向索引处21的向量添加了一个新元素。但是,我不想增加向量的大小。

a[which(a == 2) + 1] <- 3

有没有一种方法可以检查此向量的极限并仅在向量边界内分配值3?

4 个答案:

答案 0 :(得分:1)

以下是我能想到的最简单的方法。

library(zoo)
a = rep(NA, 20)
a[c(1, 8, 15, 20)] = 2
a[which(a == 2 & index(a) < length(a)) + 1] <- 3

答案 1 :(得分:1)

另一种方法是在比较中不执行向量的nth值。相反,我们只会比较n-1

a[which(head(a, -1L)  == 2) + 1] <- 3

答案 2 :(得分:0)

您可以删除长度大于a的那些索引。

a <- rep(NA, 20)
ind <- c(1, 8, 15, 20)
a[ind] = 2
new_ind <- ind + 1
new_ind <- new_ind[new_ind > 0 & new_ind < length(a)]
a[new_ind] <- 3
a
#[1]  2  3 NA NA NA NA NA  2  3 NA NA NA NA NA  2  3 NA NA NA  2

答案 3 :(得分:0)

另一种方法是首先存储向量的length,然后根据初始尺寸选择值。

a = rep(NA, 20)
dim_a <- length(a) 
a[c(1, 8, 15, 20)] = 2
a[which(a == 2) + 1] <- 3

a[seq_len(dim_a)] #select all elements up until length of initial a

#2  3 NA NA NA NA NA  2  3 NA NA NA NA NA  2  3 NA NA NA  2