我要对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)]
我得到相同的结果。
是否可以基于列评级的任意顺序获得任意顺序?
类似这样的东西:
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"))]
但是我在表中的顺序与以前相同。
答案 0 :(得分:2)
您需要先将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)
答案 1 :(得分:1)
这里是一个使用setorder
中的data.table
的选项,应该确实很快。我首先创建一个分组变量,该变量基于@akrun对您的previous question的回答。
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"
)
答案 2 :(得分:0)
由于您要求任意顺序,请尝试使用适当的索引:
Behavior