如何在 R 中遇到条件后更改向量中一定数量的值?



我有一个随机向量,0和1按一定比例。现在,我想在向量中出现 0 后将 100 个 1 更改为 0。我怎样才能做到这一点?

这是向量:

n <- 100000
a <- round(n/3)
b <- round(a/100)
set.seed(1)
x <- rep(1, n)
x[sample(1:a, b, FALSE)] <- 0

您首先获得最低which才能找到第一个0。然后,检查是否出现任何100并将其替换为0

让我们尝试使用小样本:

n <- 20
a <- round(n/2)
b <- round(a/4)
set.seed(1)
x <- rep(1, n)
x[sample(1:a, b, FALSE)] <- 0
x[18] = 100  #Change 18th element as 100
x
#[1]   1   1   0   0   1   1   1   1   1   1   1   1   1   1   1   1   1 100   1   1

# Index of first 0
idx_0 <-  min(which(x==0))
x[idx_0:length(x)] <- 
ifelse(x[idx_0:length(x)]==100, 0 , x[idx_0:length(x)])
# Modified x
x
# [1] 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1

已编辑:根据OP的反馈。目标是更新下一个n(例如 10(个值。

idx_0 <-  min(which(x==0))
x[idx_0:min((idx_0+10),length(x))]  <- 0   #Update next 10 values with 0
x
#[1]   1   1   0   0   0   0   0   0   0   0   0   0   0   1   1   1   1 100   1   1

最新更新