我有一个包含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?
答案 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