У меня есть фрейм данных с двумя столбцами, id
и value
и более 100 000 наблюдений.
Существует около 1000 различных идентификаторов.
Я хотел бы создать два новых фрейма данных с теми же данными, что и исходный, но со строками, отсортированными по следующим критериям.
Для одного фрейма данных, если две строки r1
и r2
имеют идентификаторы id1
и id2
соответственно, и если число строк с id = id1
меньше числа или строк с id = id2
, тогда r1
должно появиться до r2
.
Для другого фрейма данных, если две строки r1
и r2
имеют идентификаторы id1
и id2
, а максимальный value
строки с id = id1
меньше максимального значения строка с id = id2
, когда r1
должно появиться до r2
.
Два порядка определены в соответствии с агрегатными функциями столбцов , поэтому решение для создания такого порядка позволило бы создать гораздо больший класс порядков.
Как я могу эффективно построить такие заказы в R?
EDIT:
Это мой код, он работает, но он медленный и длинный. Интересно, есть ли более умный и быстрый способ сделать это?
library(hashmap)
a <- read.table(filename, header = T)
aggregate_values <- unlist(lapply(unique(a[[1]]), function(x) max(a[a[[1]] == x,2])))
id_to_aggregate_value <- hashmap(unique(a[[1]]), aggregate_values)
aggregate_values_columns <- id_to_aggregate_value[[a[[1]]]]
a <- cbind(a, aggregate_values_columns)
a <- a[order(a[,3]),]