Вместо использования
newdata$Prediction <- ifelse(nrow(newdata) <= 17, newdata$Value, NA)
вы можете использовать что-то вроде
newdata$Prediction <- ifelse(as.numeric(rownames(newdata)) <= 17, newdata$Value, NA)
Разница здесь заключается в понимании того, как nrow()
и rownames()
работают.
например, принимая пороговое значение 3
, ваш пример ввода возвращает
ID Year Value Prediction
1 1 2016 114235 114235
2 2 2016 114235 114235
3 3 2016 114235 114235
4 4 2016 114235 NA
5 5 2016 114235 NA
Хотя методы, упомянутые в комментариях к вашему вопросу, совершенно верны, я все еще публикую это, потому что ваша попытка былане слишком далеко.
В качестве альтернативы, вы также можете попробовать использовать tidyverse
функции:
newdata %>%
mutate(rn = 1:n()) %>%
mutate(Prediction = if_else(rn <= 3, Value, NULL)) %>%
select(-rn)