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

时间:2018-01-25 17:09:47

标签: r data.table

我在使用data.table选项聚合值时在by中注意到,分组变量在数据集中采用其自然顺序,类似于我认为的SQL。因此,如果数据中的2先于1,则输出的排序在1之前具有聚合级别2.在大多数情况下,我不希望这样。我注意到可以在sort变量上调用by,但输出列标签现在是sort。是否可以通过其先前的值(或完全不同的东西?)来命名它?示例:

mydt <- data.table(nums=1:5, lets=letters[5:1])
mydt[, .(is2=nums==2), by=sort(lets)]

给出

   sort is2
1:    a   F
2:    b   T
3:    c   F
4:    d   F
5:    e   F

但我想:

   lets is2
1:    a   F
2:    b   T
3:    c   F
4:    d   F
5:    e   F

1 个答案:

答案 0 :(得分:1)

问题的标题是是否可以重命名R in passant中的data.table中的“by”分组变量?但实际问题是如何通过分组对聚合的结果进行排序变量。所以,一个问题有两个。

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

是的,例如,

players.getPlayers().toFlowable(BackpressureStrategy.BUFFER)
mydt[, .(is2 = nums == 2), by = .(lets = paste(lets, toupper(lets), sep = "-"))]

为了说明,使用了完全不同的功能。

如何通过分组变量对聚合结果进行排序?

最简单的方法是使用Frank已经提到的 lets is2 1: e-E FALSE 2: d-D TRUE 3: c-C FALSE 4: b-B FALSE 5: a-A FALSE

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

lets is2 1: a FALSE 2: b FALSE 3: c FALSE 4: d TRUE 5: e FALSE

  

help("data.table")相同,但在by列的setkey()列上额外by次运行   结果,为方便起见。通常的做法是使用'keyby ='   通常希望对结果进行排序。

或者,可以在之后订购结果:

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