我在使用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
答案 0 :(得分:1)
问题的标题是是否可以重命名R in 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