Это продолжение до R: Объединение последовательных элементов в новые отдельные столбцы , где объединения элементов были перемещены в столбцы на основе сравнения значений (метка группы следующего по наивысшему значение было помещено в новый столбец).
Однако там не учитывается вероятность того, что предметы имеют одинаковое значение. Я пытаюсь включить эти случаи так, чтобы, если у следующего наивысшего значения в группе было несколько элементов, для каждого из этих наивысших элементов будет строка.
Учитывая следующие данные:
df = data.frame(
Name = c('lorem', 'lorem', 'lorem', 'lorem', 'lorem', 'ipsum', 'ipsum', 'ipsum', 'ipsum', 'ipsum', 'dolor', 'dolor', 'dolor', 'dolor', 'dolor', 'dolor'),
Delay = c(0, 30, 80, 80, 100, 0, 30, 50, 80, 100, 0, 0, 60, 60, 100, 100),
Group = c('E', 'D', 'C', 'B', 'A', 'E', 'D', 'C', 'B', 'A', 'C', 'A', 'B', 'D', 'F', 'E') )
Функция dplyr dens_rank (), примененная к фигурам задержки, обеспечивает довольно простой способ работы спаривания; в пределах каждого Имени группы с рангом 1 должны быть в паре с рангом 2, в свою очередь 2s будут в паре с 3s, 3s с 4s ...
Name Delay Group Rank
<chr> <dbl> <chr> <int>
1 lorem 0 E 1
2 lorem 30 D 2
3 lorem 80 C 3
4 lorem 80 B 3
5 lorem 100 A 4
6 ipsum 0 E 1
7 ipsum 30 D 2
8 ipsum 50 C 3
9 ipsum 80 B 4
10 ipsum 100 A 5
11 dolor 0 C 1
12 dolor 0 A 1
13 dolor 60 B 2
14 dolor 60 D 2
15 dolor 100 F 3
16 dolor 100 E 3
Таким образом, желаемый результат будет (где Step просто нижний рейтинг пары):
Name Source Target Step
lorem E D 1
lorem D C 2
lorem D B 2
lorem B A 3
ipsum E D 1
ipsum D C 2
ipsum C B 3
ipsum B A 4
dolor C B 1
dolor A B 1
dolor C D 1
dolor A D 1
dolor B F 2
dolor D F 2
dolor B E 2
dolor D E 2
Я не уверен, может ли какая-нибудь умная группировка dplyr быть полезной здесь (я был счастлив обнаружить, что это решило предыдущий вопрос, но это не похоже на это можно сделать с помощью того же решения «сортируй и смотри при следующей строке»). Раньше я думал, что какой-то встроенный l oop мог бы быть способом к go, но это казалось излишне неэффективным. возможность объединить группы с рангами с разницей 1.