Как я могу отсортировать строки таблицы data.table в произвольном порядке? - PullRequest
0 голосов
/ 02 октября 2018

Я хочу отсортировать data.table (dat):

Rating  el  es
A   21.96   0.15
AA  26.25   0.13
AAA 34.07   0.06
B   0.84    0.07
BB  2.24    0.07
BBB 14.63   0.52
CCC 70.48   0.04

Применяя

dat[order(dat$Rating)]

, я получаю тот же результат.

IsМожно ли получить произвольный порядок, основанный на произвольном порядке рейтинга столбцов?

Примерно так:

Rating  el  es
AAA 34,07   0,06
AA  26,25   0,13
A   21,96   0,15
BBB 14,63   0,52
BB  2,24    0,07
B   0,84    0,07
CCC 70,48   0,04

Я пытался:

dat[order(dat[,1],levels = c("AAA","AA","A","BBB", "BB", "B", "CCC"))]

но яполучите тот же порядок в таблице, что и раньше.

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Поскольку вы запросили произвольный порядок, попробуйте использовать соответствующую индексацию:

 dat[c(3,2,1,6,5,4,7),]
# Rating    el   es
#     AAA 34.07 0.06
#      AA 26.25 0.13
#       A 21.96 0.15
#     BBB 14.63 0.52
#      BB  2.24 0.07
#       B  0.84 0.07
#     CCC 70.48 0.04
0 голосов
/ 02 октября 2018

Вот опция, которая использует setorder из data.table, которая должна быть очень быстрой.Сначала я создаю группирующую переменную, которая основана на ответе @ akrun на ваш предыдущий вопрос .

dat[, grp := substr(Rating, 1, 1)]
setorder(dat, grp, -Rating)[]
#   Rating    el   es grp
#1:    AAA 34.07 0.06   A
#2:     AA 26.25 0.13   A
#3:      A 21.96 0.15   A
#4:    BBB 14.63 0.52   B
#5:     BB  2.24 0.07   B
#6:      B  0.84 0.07   B
#7:    CCC 70.48 0.04   C

data

dat <- data.table::fread(
  "Rating  el  es
  A   21.96   0.15
  AA  26.25   0.13
  AAA 34.07   0.06
  B   0.84    0.07
  BB  2.24    0.07
  BBB 14.63   0.52
  CCC 70.48   0.04"
)
0 голосов
/ 02 октября 2018

Сначала необходимо изменить Rating на factor, затем использовать order:

dat$Rating <- factor(dat$Rating, levels = c("AAA","AA","A","BBB", "BB", "B", "CCC"))

dat[order(dat$Rating), ]
# Rating    el   es
# 3    AAA 34.07 0.06
# 2     AA 26.25 0.13
# 1      A 21.96 0.15
# 6    BBB 14.63 0.52
# 5     BB  2.24 0.07
# 4      B  0.84 0.07
# 7    CCC 70.48 0.04

Данные:

tt <- "Rating  el  es
A   21.96   0.15
AA  26.25   0.13
AAA 34.07   0.06
B   0.84    0.07
BB  2.24    0.07
BBB 14.63   0.52
CCC 70.48   0.04"

dat <- read.table(text = tt, header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...