我有这样的R代码,用来操作一个 data.table
但我不明白什么是 by
做。
dt = cli[(aaa==0) & bbb==0,
.(a1, a2="abc", a3=aaa,),
by=c("b1","b2")
]
如果我的理解正确的话,它将创建一个新的 data.table
择行 cli
其中列 aaa
和 bbb
都等于零,且列 a1
,一个新的栏目 a2
始终等于 "abc"
并重命名列 aaa
作为 a3
.
我看到,新的 data.table
中的列也进行 c("b1","b2")
但我不明白他们背后是否有什么操作,否则为什么不把他们列在下面?.(...)
部分?
有和没有 by
参数,我获得了相同的行数。
编辑: 我举一个简化的例子。
in1
ID DIG VAR1 VAR2
1: 230 68 TRUE TRUE
2: 232 0 FALSE TRUE
3: 236 81 TRUE FALSE
4: 239 92 TRUE FALSE
5: 243 0 FALSE TRUE
6: 245 45 TRUE TRUE
in1[(DIG<80),.(ID)]
ID
1: 230
2: 232
3: 243
4: 245
in1[(DIG<80),.(ID), by=c('VAR1','VAR2')]
VAR1 VAR2 ID
1: TRUE TRUE 230
2: TRUE TRUE 245
3: FALSE TRUE 232
4: FALSE TRUE 243
在我看来, by
部分只是改变了选择的顺序。这样做对吗?
by
是按列内所有组进行操作 b1
和 b2
. 比方说,列 b1
有两个级别(值 0
和 1
,使用 by="b1"
新的data.table将有两行对应于在 b1==0
并分别 b1==2
. 如果您省略了 by
然后,该操作将被联合应用于所有值的 b1
. 如果这仍然是不清楚,我建议你比较输出与和不包括 by=c("b1","b2")
. 你应该只看到一行没有它。有了 by=c("b1","b2")
输出的行数 data.table
对应于两者的唯一数值 b1
和 b2
.