Вы можете использовать findInterval
функцию:
vec = c("D+", "A0", "F", "D0", "99", "B0", "B+", "C+", "C0", "A+")
c("High","Low")[findInterval(vec>"C"|vec=="99",0:1)]
[1] "Low" "High" "Low" "Low" "Low" "High" "High" "Low" "Low" "High"
или даже
factor(findInterval(vec>"C" | vec == "99", 0:1 ), label = c("High","Low"))
[1] Low High Low Low Low High High Low Low High
Levels: High Low
если у вас есть фрейм данных:
df = data.frame(result=vec,stringsAsFactors=FALSE)
transform(df,grade=factor(findInterval(result>"C"|result=="99",0:1),label=c("High","Low")))
result grade
1 D+ Low
2 A0 High
3 F Low
4 D0 Low
5 99 Low
6 B0 High
7 B+ High
8 C+ Low
9 C0 Low
10 A+ High
Ю может посмотреть демоверсию здесь