当我使用by=
对表进行操作时,生成的表与原始表中的记录顺序相同:
dt1 <- fread(
"colA,colB
B,3
A,1
C,2
B,1
C,2
")
desired <- c('A', 'C', 'B')
#> dt1[, mean(colB), by=colA]
# colA V1
#1: B 2
#2: A 1
#3: C 2
但是,如果我不是按原始顺序(B A C
此处)而不是通常的sort()
顺序(可能是A B C
或C B A
),但在我的自定义顺序(比如,A C B
)?我应该以某种方式在结果表中使用rank
吗?
答案 0 :(得分:3)
聚合完成后你可以重新order
dt1[, mean(colB), by=colA][order(desired),]
# colA V1
# 1: A 1
# 2: C 2
# 3: B 2
感谢Arun解决了这个问题。你的桌子上有错误的空间。删除它们,然后你可以使用order
(上面),或Arun的加入建议(见下文)。
dt1[, colA := gsub(" ", "", colA)]
dt1[, mean(colB), keyby=colA][desired]
# colA V1
# 1: A 1
# 2: C 2
# 3: B 2
查看原始数据:
dt1 <- fread(
"colA,colB
B,3
A,1
C,2
B,1
C,2
")
dput(dt1)
# structure(list(colA = c(" B", " A", " C", " B", " C" ...
# extra space ----- ^^^