所以我正在尝试学习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/