Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在满足R中的条件后,如何改变向量中一定数量的值?_R_Vector_Data Manipulation - Fatal编程技术网

在满足R中的条件后,如何改变向量中一定数量的值?

在满足R中的条件后,如何改变向量中一定数量的值?,r,vector,data-manipulation,R,Vector,Data Manipulation,我有一个随机向量,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 n您首先获得中的最小值,该值首先定位0。然后,检查是否出现100,并将其替换为0 让我们尝试使用小样本: n <- 20 a <-

我有一个随机向量,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

n您首先获得
中的最小值,该值
首先定位
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

请提供一个最小的示例,例如n=10-20-ish而不是100000,并显示所需的输出。如果两个
0
之间的差值小于100会怎么样?非常感谢,但我想我没有说清楚。我想在出现0后用0替换向量的下100个值。以0为起点。@Juli这样就容易多了。让我更新我的答案,用
0
@更新下一个
10
值。朱莉看一下更新后的答案。我添加了一个条件,这样它将在下一个
10
或向量末尾更新。这就是你想要的吗?谢谢你,MKR 25@朱莉很高兴这对你有用。您可以通过单击答案框左侧的
勾选
符号来接受答案。因此,它将有助于未来的用户。
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