Sto utilizzando il pacchetto data.table
per completare alcune analisi. Uno dei passaggi che sto prendendo riguarda l'utilizzo della funzione by =
per ottenere statistiche aggregate. Tuttavia, gli aggregati devono essere calcolati sui risultati univoci in ciascun sottoinsieme by
. Ho utilizzato unique
e le chiavi per garantire che ogni gruppo by
sia costituito da record distinti. Qualcosa di vagamente come il qui sotto:In data.table di R, come è conservata la chiave di un file data.table in sottoinsiemi con riferimento a .SD?
dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var]
ho notato che la chiave .SD
sembrava variare in base al set di chiavi per dt_old
e la dichiarazione by =
. Ovviamente, questo stava avendo un effetto sul fatto che i miei sottoinsiemi risultanti fossero unici o meno.
Volevo ottenere una certa chiarezza, così ho scritto il seguito.
library(data.table)
set.seed(1554)
dt_example <- data.table(id = 1:50,
site = sample(x = c("A","B","C"),
size = 50,
replace = TRUE,
prob = c(0.4,0.4,0.2)),
group = sample(x = c("Eta","Mu","Omicron","Psi"),
size = 50,
replace = TRUE),
team = sample(x = 1:3,
size = 50,
replace = TRUE,
prob = c(0.2,0.3,0.5)))
setkey(x = dt_example,
group,
team)
> dt_example[,as.list(key(.SD)),by = site]
site V1 V2
1: B group team
2: A group team
3: C group team
setkey(x = dt_example,
site,
group,
team)
> dt_example[,as.list(key(.SD)),by = site]
Empty data.table (0 rows) of 1 col: site
Quello che sto cercando di capire perché, nella prima versione, la chiave per .SD
è coerente, mentre, nella seconda versione, .SD
non aveva la chiave a tutti. Penso che abbia qualcosa a che fare con il fatto che la colonna by =
non è inclusa direttamente in .SD
, che sta rompendo la chiave, ma volevo confermare la mia logica.
Quindi, la mia domanda è questa: perché il sottoinsieme di una tabella di dati, .SD
, non ha alcuna chiave quando una delle colonne che comprende la chiave della tabella di dati padre viene utilizzata come variabile di raggruppamento by
?
Questa domanda è in realtà solo un FR. – eddi
@eddi Che cos'è un FR? – TARehman
FR = Richiesta di funzionalità – Jaap