在data.table中的子集--通过参数实现

问题描述 投票:0回答:1

我有这样的R代码,用来操作一个 data.table 但我不明白什么是 by 做。

dt = cli[(aaa==0) & bbb==0,    
         .(a1, a2="abc", a3=aaa,),    
         by=c("b1","b2")
        ]

如果我的理解正确的话,它将创建一个新的 data.table 择行 cli 其中列 aaabbb 都等于零,且列 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 部分只是改变了选择的顺序。这样做对吗?

r data.table data-manipulation
1个回答
1
投票

by 是按列内所有组进行操作 b1b2. 比方说,列 b1 有两个级别(值 01,使用 by="b1" 新的data.table将有两行对应于在 b1==0 并分别 b1==2. 如果您省略了 by 然后,该操作将被联合应用于所有值的 b1. 如果这仍然是不清楚,我建议你比较输出与和不包括 by=c("b1","b2"). 你应该只看到一行没有它。有了 by=c("b1","b2") 输出的行数 data.table 对应于两者的唯一数值 b1b2.

© www.soinside.com 2019 - 2024. All rights reserved.