r - Data.table:与 j 一起使用的方括号

标签 r data.table

所以我正在尝试学习data.table并在网上备忘单中找到了.SD符号link 。因此,该示例使用方括号和 .SD 来对行进行子集化。但为什么不直接使用 i 来子集行呢?那么 .SD[c(1, .N)] 是行的子集吗?为什么我应该像这样子集行?

    library(data.table)

    DT <- data.table(A = letters[c(1, 1, 1, 2, 2)], 
                     B = 1:5, 
                     C = 6:10)

    DT
    #>    A B  C
    #> 1: a 1  6
    #> 2: a 2  7
    #> 3: a 3  8
    #> 4: b 4  9
    #> 5: b 5 10

 # Method 1   
    DT[, .SD[c(1, .N)], by = A]
    #>    A B  C
    #> 1: a 1  6
    #> 2: a 3  8
    #> 3: b 4  9
    #> 4: b 5 10

# method 2
    DT[c(1, .N), .SD, by = A]
    #>    A B  C
    #> 1: a 1  6
    #> 2: b 5 10

最佳答案

在第二种情况下,我们指定带有索引的i,其中.N是最后一行,而在第一种情况下,它是每组的最后一行

DT[c(1, .N)]

类似于

DT[c(1, .N), .SD, by = A]

唯一的区别是 i 中指定的行将用于处理/更改分组信息 by 'A'

关于r - Data.table:与 j 一起使用的方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56278209/

相关文章:

r - 在按下操作按钮之前加载微调器

r - `levels<-`(这是什么魔法?

r - 选择在某些年份可用的组

r - 数据表总和和子集

从 R 中的字符串中删除数字

r - 在列表中查找重复项,包括排列

使用 set.seed 函数的原因

r - 数据表中的条件差异计算

r - 按组计算级别

r - 在带时间戳的事务的 data.table 中使用 zoo 的 rollsum