Вы столкнулись с этой проблемой, потому что вы пытаетесь присвоить символьные значения целочисленному вектору.Если вместо этого вы работаете с символьным вектором, он должен работать:
> rivers_size <- as.character(rivers)
> rivers_size[rivers >= 3000] = 'long'
> rivers_size[rivers >= 1500 & rivers < 3000] = 'meidum'
> rivers_size[rivers >= 500 & rivers < 1500]='short'
> rivers_size[rivers < 500] = 'tiny'
> table(rivers_size)
rivers_size
long meidum short tiny
1 5 53 82
> pie(table(rivers_size))
В качестве альтернативы, то же самое можно сделать с помощью cut
(как показывает @ Dave2e):
rivers <- cut(datasets::rivers,
breaks = c(0, 500, 1500, 3000, Inf),
labels = c("tiny", "short", "medium", "long"),
right = FALSE)
pie(table(rivers))