Теперь я делаю это, зацикливаясь на отсортированном векторе, но, возможно, есть более быстрый способ использования внутренних функций R, и, возможно, мне даже не нужно сортировать.
vect = c(41,42,5,6,3,12,10,15,2,3,4,13,2,33,4,1,1)
vect = sort(vect)
print(vect)
outvect = mat.or.vec(length(vect),1)
outvect[1] = counter = 1
for(i in 2:length(vect)) {
if (vect[i] != vect[i-1]) { counter = counter + 1 }
outvect[i] = counter
}
print(cbind(vect,outvect))
vect outvect
[1,] 1 1
[2,] 1 1
[3,] 2 2
[4,] 2 2
[5,] 3 3
[6,] 3 3
[7,] 4 4
[8,] 4 4
[9,] 5 5
[10,] 6 6
[11,] 10 7
[12,] 12 8
[13,] 13 9
[14,] 15 10
[15,] 33 11
[16,] 41 12
[17,] 42 13
Код используется для создания диаграмм с целыми числами по оси X вместо реальных данных, потому что для меня расстояние между значениями X не имеет значения.
Так что в моем случае наименьшее значение x всегда равно 1., а самое большое всегда равно количеству значений X.
- редактировать: из-за недопонимания по поводу моего вопроса я добавил самодостаточный код с выводом.