R 是否可以重命名为“a”;由「;是否将data.table中的变量分组?

R 是否可以重命名为“a”;由「;是否将data.table中的变量分组?,r,data.table,R,Data.table,我注意到在data.table中,当使用by选项聚合值时,分组变量在数据集中采用其自然顺序,类似于我相信的SQL。因此,如果数据中2先于1,则输出的顺序将聚合级别2先于1。在大多数情况下,我不想要这个。我注意到可以在by变量上调用sort,但是输出列标签现在是sort。是否可以根据其先前的值(或完全不同的值)来命名它?例如: 但我想: lets is2 1: a F 2: b T 3: c F 4: d F 5: e F 问题的标题是:是

我注意到在
data.table
中,当使用
by
选项聚合值时,分组变量在数据集中采用其自然顺序,类似于我相信的SQL。因此,如果数据中2先于1,则输出的顺序将聚合级别2先于1。在大多数情况下,我不想要这个。我注意到可以在
by
变量上调用
sort
,但是输出列标签现在是
sort
。是否可以根据其先前的值(或完全不同的值)来命名它?例如:

但我想:

   lets is2
1:    a   F
2:    b   T
3:    c   F
4:    d   F
5:    e   F
问题的标题是:是否可以在R en passant中的data.table中重命名“by”分组变量?但实际问题是如何按分组变量对聚合结果进行排序。因此,一个问题中有两个问题

是否可以在R en passant中的data.table中重命名“by”分组变量? 是的,它是,例如

mydt[, .(is2 = nums == 2), by = .(lets = paste(lets, toupper(lets), sep = "-"))]
为了便于说明,使用了完全不同的功能

如何按分组变量对聚合结果进行排序? 最简单的方法是使用前面提到的
keyby=

帮助(“data.table”)

by
相同,但在的
by
列上运行另一个
setkey()
结果,为了方便。使用“keyby”是常见的做法 当您希望对结果进行排序时,请执行常规操作

或者,可以随后对结果进行排序:

mydt[, .(is2 = nums == 2), by = lets][order(lets)]

编辑显然,调用
by=sort(x)
会产生非常不可预测的行为。我不知道这里到底发生了什么。有人有洞察力吗?
keyby=
你是说?或者
by=(name=var)
?@Frank我想我指的是后者。我将不得不做更多的调查来理解为什么我会有这些数字上的差异。我认为它必须单独对“by”变量进行排序,然后将其余变量聚合起来。
mydt[, .(is2 = nums == 2), by = .(lets = paste(lets, toupper(lets), sep = "-"))]
   lets   is2
1:  e-E FALSE
2:  d-D  TRUE
3:  c-C FALSE
4:  b-B FALSE
5:  a-A FALSE
mydt[, .(is2 = nums == 2), keyby = lets]
   lets   is2
1:    a FALSE
2:    b FALSE
3:    c FALSE
4:    d  TRUE
5:    e FALSE
mydt[, .(is2 = nums == 2), by = lets][order(lets)]
   lets   is2
1:    a FALSE
2:    b FALSE
3:    c FALSE
4:    d  TRUE
5:    e FALSE