Имеется таблица со столбцом неуникальных элементов (здесь, Name) и еще два столбца: один с метками (Group), которые уникальны только в группе первых столбцов, а третий содержит значения (Delay) Я пытаюсь получить таблицу, содержащую столбцы для имени и группы, и третий столбец с группой следующего наибольшего значения задержки. Если нет следующего наивысшего значения, тогда нет строки.
Таким образом, для набора данных, такого как:
df = data.frame(
Name = c('lorem', 'lorem', 'lorem', 'lorem', 'lorem', 'ipsum', 'ipsum', 'ipsum', 'ipsum', 'ipsum', 'dolor', 'dolor', 'dolor', 'dolor', 'dolor', 'dolor', 'amet', 'amet', 'amet', 'amet', 'amet', 'amet'),
Group = c('E', 'D', 'C', 'B', 'A', 'E', 'D', 'C', 'B', 'A', 'C', 'A', 'B', 'D', 'F', 'E', 'C', 'A', 'B', 'D', 'F', 'E'),
Delay = c(5, 32, 59, 86, 113, 0, 27, 54, 81, 108, 10, 37, 64, 91, 111, 118, 0, 27, 54, 81, 101, 108)
)
Name Group Delay
1 lorem E 5
2 lorem D 32
3 lorem C 59
4 lorem B 86
5 lorem A 113
6 ipsum E 0
7 ipsum D 27
8 ipsum C 54
9 ipsum B 81
10 ipsum A 108
11 dolor C 10
12 dolor A 37
13 dolor B 64
14 dolor D 91
15 dolor F 111
16 dolor E 118
17 amet C 0
18 amet A 27
19 amet B 54
20 amet D 81
21 amet F 101
22 amet E 108
Желаемый результат будет (хотя при сохранении более высокой задержки значение для каждой пары не повредит):
Name Source Target
lorem E D
lorem D C
lorem C B
ipsum B A
ipsum E D
ipsum D C
ipsum C B
ipsum B A
dolor C A
dolor A B
dolor B D
dolor D F
dolor F E
amet C A
amet A B
amet B D
amet F E
В конечном итоге, это go в граф sankeyNetwork с использованием пакета networkD3.
Я попробовал следующее, глядя на следующая строка для соответствия в имени (после сортировки), хотя это не сработало, как ожидалось, для моих фактических данных, но также ничего не делает с фиктивными данными:
l = data.frame(Name = character(), From = character(), Target = character())
for(i in 1:(nrow(df) - 1)){
if(df$Name[i] == df$Name[i + 1])
{
From = as.character(df$Group[i])
Target = as.character(df$Group[i + 1])
Name = as.character(df$Name[i])
}
links = rbind(l, list(Name = as.character(Name), From = as.character(From), Target = as.character(Target)))
}