Хотя для таких сценариев лучше использовать что-то вроде case_when
или if_else
, просто для забавы, пара модификаций вашей попытки действительно работает.
rest_tidy=data.frame(score=c(1,15,25,35,27,NA))
best <- rest_tidy %>%
rowwise() %>%
mutate(
graded = {
if(is.na(score)) print("D")
else if(score < 14) print("A")
else if(between(score, 14, 27)) print("B")
else print("C")
}
)
приводит к best
:
score graded
<dbl> <chr>
1 1 A
2 15 B
3 25 B
4 35 C
5 27 B
6 NA D
требовались только условия для обработки na
случаев и правильная вложенность для запуска нескольких if
случаев.Наконец, rowwise
обеспечивает оценку каждого элемента, а не только первого элемента столбца.
Опять же, этот подход может работать, но не рекомендуется.