Этот код заменит все NA до "S" на 0 в вашем векторе:
initial_row <- c(1,2,4,NA,4,NA,2,"S",NA,NA,NA)
result_row <- initial_row
result_row[is.na(result_row[1:which(result_row == "S")[1]])] <- 0
Объяснение: Сначала мы скопировали начальную строку в строку результатов, над которой мы будем работать.Затем мы выбрали NA в строке результатов, которые находятся между позицией 1 и позицией «S».Эти значения заменяются на ноль.
Важные допущения:
- Вектор имеет длину не менее 2.
- Вектор содержит "S"
Loop версия
Если вы настаиваете на использовании цикла, чтобы сделать это (будет работать медленнее), вы можете сделать это:
for(i in 1:length(result_row)){
if(result_row[i] == "S"){
break
}
if(is.na(result_row[i])){
result_row[i] <- 0
}
}
Редактировать: если у вас есть символы "NA"
в вашем векторе вместоNA
(который R распознает как отсутствующий элемент), этот код необходимо изменить следующим образом:
result_row[(result_row[1:which(result_row == "S")[1]]) == "NA"] <- 0
или
for(i in 1:length(result_row)){
if(result_row[i] == "S"){
break
}
if(result_row[i] == "NA"){
result_row[i] <- 0
}
}