如何按任意顺序对数据表的行进行排序?

3

我想对数据表(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)]

我得到了相同的结果。

是否可以根据列评分的任意排序获得任意顺序?

类似于这样:

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"))]

但是我在表格中得到的顺序和之前一样。


将评级机构的评级首先转换为数字 - chinsoon12
这里可以帮助。 - s__
3个回答

3

首先需要将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)

最好使用有序因子,这样就可以使用不等式等。 - Frank

2
这里有一个选项,使用data.table中的setorder,应该非常快。首先我创建了一个基于@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

数据

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"
)

非常感谢 Markus :). 这真的很快。但是我不明白为什么在 setorder 中要使用 '-Rating'? - maniA
1
@maniA 不客气。我们首先按照 grp 升序排列(默认),然后按照 Rating 降序排列。这就是为什么有前缀 "-" - markus

0

由于您要求按任意顺序,尝试使用适当的索引:

 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接