edit: работает с измененной версией отмеченного ответа, как показано ниже
data1 <- data %>% group_by(pitch_2) %>% mutate(rank = order(euclid_dist))
оригинал ----
У меня в моем фрейме данных есть пары всех возможных комбинаций высоты тона с моего таймфрейма (более 80 миллионов) - в pitch_1 - один идентификатор, а в pitch_2 - другой идентификатор с третьим столбцом euclid_dist - мера того, насколько близко один шаг к другой - и я хотел бы создать четвертый столбец в моем фрейме данных, где я ранжирую комбинации по наименьшему числу (наилучшее соответствие) на наибольшее.
Я хочу, чтобы ранжирование проводилось относительно других комбинаций с одинаковым основным шагом в pitch_2. Таким образом, они ранжируют высоту тона ниже pitch_1 по наименьшему числу по сравнению со всеми другими pitch_1, которые сравниваются с тем же pitch_2.
Вот только представление о том, как выглядят мои данные
> head(data)
pitch_1 pitch_2 euclid_dist
2 400010-FF 493247-SI 3.631515
3 493247-SL 493247-SI 3.125729
4 349193-FT 493247-SI 4.619143
5 150037-FF 493247-SI 4.137001
6 218596-FF 493247-SI 2.536352
7 218596-SI 493247-SI 1.438356
используя ранг в этом небольшом подмножестве, я получил то, на что я хочу, чтобы мои данные выглядели, но не знаю, как расширить это на мой большой фрейм данных с указанием целого числа pitch_2s
data$rank <- rank(data$euclid_dist)
как я хочу, чтобы это выглядело (есть ряды, которые вы не видите, которые заполняют другие ряды)
pitch_1 pitch_2 euclid_dist rank
2 400010-FF 493247-SI 3.631515 7
3 493247-SL 493247-SI 3.125729 6
4 349193-FT 493247-SI 4.619143 10
5 150037-FF 493247-SI 4.137001 8
6 218596-FF 493247-SI 2.536352 4
7 218596-SI 493247-SI 1.438356 1