Как изменить определенное количество значений в векторе после одного условия в R? - PullRequest
0 голосов
/ 26 мая 2018

У меня есть случайный вектор с 0 и 1 в определенной пропорции.Теперь я хочу изменить 100 единиц на 0 после появления 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

1 Ответ

0 голосов
/ 26 мая 2018

Сначала вы получаете минимум 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
...