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