Мне нужно изменить определенные значения в одном векторе в зависимости от того, какие значения находятся в тех же местах в другом векторе. Ниже приведены мои векторы:
r <- (1:20)
a <- c(54,54,54,54,55,55,50,0,0,0,0,0,0,1,1,1,1,1,56,57)
В основном, если любое из значений в 'a' больше или равно и меньше 20 (поэтому любое значение в a, равное 0-20), я хочу изменить это значение в 'r' само по себе -1. Если значение в 'a' больше 20 или меньше 0, тогда я хочу, чтобы его значение в 'r' оставалось неизменным. Таким образом, для 8-го места в «а» значение равно 0, которое больше / равно 0 и меньше 20, поэтому я хочу, чтобы восьмое место в «r» (имеет значение 8) вычесть на 1 (так что теперь его значение будет 7). Но для первой точки в «а» значение равно 54, что больше 20, поэтому 1-е значение в r останется прежним. Я предположил, что мне нужно написать для l oop для этого, и я начал, но он не делает то, что мне нужно сделать. Это то, что у меня есть.
for(i in a){
if (i >= 0 && i < 20){
r[i] = r[i]-1
} else {
r[i] = r[i]
}
}
Когда я запускаю этот код, он возвращает r как
[1] -4 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 NA NA NA NA NA NA NA NA NA NA NA
[32] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
Как я могу получить его, чтобы он возвращал правильный результат, который должен выглядеть следующим образом :
[1] 1 2 3 4 5 6 7 7 8 9 10 11 12 13 14 15 16 17 19 20
Спасибо!