.SD
signifie quelque chose comme "S
ubset d' D
ata.tableau". Il n'y a pas d'importance pour l'initiale "."
, à l'exception du fait qu'il rend encore plus improbable qu'il y aura un affrontement avec un définis par l'utilisateur nom de la colonne.
Si c'est vos données.tableau:
DT = data.table(x=rep(c("a","b","c"),each=2), y=c(1,3), v=1:6)
setkey(DT, y)
DT
# y x v
# [1,] 1 a 1
# [2,] 1 b 3
# [3,] 1 c 5
# [4,] 3 a 2
# [5,] 3 b 4
# [6,] 3 c 6
Cela peut vous aider à voir ce qu' .SD
est:
DT[, .SD[,paste(x,v, sep="", collapse="_")], by=y]
# y V1
# [1,] 1 a1_b3_c5
# [2,] 3 a2_b4_c6
Fondamentalement, l' by=y
déclaration des pauses les données d'origine.table dans l'un de ces deux sous-data.tables
DT[,print(.SD),by=y]
x v # 1st sub-data.table, called '.SD' while it's being operated on
[1,] a 1
[2,] b 3
[3,] c 5
x v # 2nd sub-data.table, ALSO called '.SD' while it's being operated on
[1,] a 2
[2,] b 4
[3,] c 6
et opère sur eux.
Pendant qu'il fonctionne sur un ou l'autre, il permet de se référer à la sous-data.table
en utilisant le pseudo-nom du/de la poignée/du symbole .SD
. C'est très pratique, car vous pouvez accéder et de faire fonctionner sur les colonnes, comme si vous étiez assis à la ligne de commande de travail avec un seul de données.table appelée .SD
... sauf qu'ici, data.table
permettra d'effectuer ces opérations sur chaque sous-data.table
définies par la combinaison de la clé, "coller" ensemble et renvoyer les résultats dans un seul data.table
!