因此,我正在尝试学习data.table
,并在link在线备忘单中使用了.SD
的符号。因此,该示例使用带有.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
答案 0 :(得分:3)
在第二种情况下,我们用索引指定i
,其中.N
是最后一行,在第一种情况下,它是每个组的最后一行
DT[c(1, .N)]
类似于
DT[c(1, .N), .SD, by = A]
唯一的区别是i
中指定的行将用于处理/更改分组信息by
'A'