Вы можете использовать
v <- c(2, 1, NA, NA, 4, 5, NA)
id <- ifelse(!is.na(v), 1, NA)
id
1 1 NA NA 1 1 NA
Это означает, что вам здесь не нужен цикл for.Если вы можете применить функцию к вектору, вам следует избегать использования цикла for.
Также, пожалуйста, предоставьте ваши данные, чтобы другие могли их использовать (как в моем коде выше).
РЕДАКТИРОВАТЬ
Согласно комментариям у вас есть несколько столбцов.Вы можете использовать тот же код.Смотри здесь
df <- data.frame(a= c(2, 1, NA, NA, 4, 5, NA), b= c(3, NA, NA, NA, 5, NA, 6))
id <- sapply(1:ncol(df), function(i){
ifelse(!is.na(df[ , i]), i, NA)})
id
a b
[1,] 1 2
[2,] 1 NA
[3,] NA NA
[4,] NA NA
[5,] 1 2
[6,] 1 NA
[7,] NA 2