Я бью себя над чем-то, что, вероятно, прямо вперед.Я хочу получить «плотное» ранжирование (как определено для функции data.table::frank
) по столбцу во фрейме данных, но не на основе правильного порядка столбцов, порядок должен быть задан другимстолбец (val
в моем примере)
Мне удалось получить плотное ранжирование с помощью решения @ Прасада Чаласани , например:
library(dplyr)
foo_df <- data.frame(id = c(4,1,1,3,3), val = letters[1:5])
foo_df %>% arrange(val) %>% mutate(id_fac = as.integer(factor(id)))
#> id val id_fac
#> 1 4 a 3
#> 2 1 b 1
#> 3 1 c 1
#> 4 3 d 2
#> 5 3 e 2
Но яхотел бы, чтобы уровни факторов были упорядочены на основе val
.Желаемый результат:
foo_desired <- foo_df %>% arrange(val) %>% mutate(id_fac = as.integer(factor(id, levels = c(4,1,3))))
foo_desired
#> id val id_fac
#> 1 4 a 1
#> 2 1 b 2
#> 3 1 c 2
#> 4 3 d 3
#> 5 3 e 3
- Я попробовал
data.table::frank
- Я попробовал оба метода @Prasad Chalasani.
- Я попытался установить порядок
id
используя id[rank(val)]
(и sort(val)
, и order(val)
). Наконец, я также попытался отсортировать уровни, используя rank(val)
и т. д., но это выдает ошибку (Evaluation error: factor level [3] is duplicated.
)
Я знаю, что можно указать порядок уровней, я использовал это для создания желаемого выхода.Это решение, однако, невелико, так как в моих данных гораздо больше строк и уровней
Мне это нужно для удобства, чтобы создать таблицу с определенным порядком, а не для вычислений.
Создано в 2018-12-19 с помощью представительного пакета (v0.2.1)