Ich verwende das Paket data.table
, um einige Analysen durchzuführen. Einer der Schritte, die ich unternehme, beinhaltet die Verwendung der by =
Funktion, um aggregierte Statistiken zu erhalten. Die Aggregate müssen jedoch anhand der eindeutigen Ergebnisse in jeder by
Teilmenge berechnet werden. Ich habe unique
und Schlüssel verwendet, um sicherzustellen, dass jede by
Gruppe aus verschiedenen Datensätzen besteht. Etwas vage wie die folgende Liste:Wie wird in der data.table von R der Schlüssel einer data.table in Teilmengen beibehalten, die mit .SD referenziert werden?
dt_new <- dt_old[,uFunc_MyFunction(x = unique(.SD)),by = grouping_var]
Ich bemerkte, dass der Schlüssel auf .SD
auf der Grundlage der Schlüsselsatz für dt_old
und der by =
Aussage zu verändern schien. Offensichtlich hatte dies eine Auswirkung darauf, ob meine resultierenden Untermengen eindeutig waren oder nicht.
Ich wollte etwas Klarheit bekommen, also schrieb ich das unten.
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
Was ich zu verstehen versuchen, ist, warum in der ersten Version der Schlüssel für .SD
konsistent ist, während in der zweiten Version .SD
gar keinen Schlüssel hatte. Ich denke, es hat etwas damit zu tun, dass die by =
Spalte nicht direkt in .SD
enthalten ist, die den Schlüssel bricht, aber ich wollte meine Logik bestätigen.
Also meine Frage ist das: Warum hat die Teilmenge einer Datentabelle, .SD
, keinen Schlüssel, wenn eine der Spalten, die den Schlüssel der übergeordneten Datentabelle enthält, als by
Gruppierungsvariable verwendet wird?
Diese Frage ist wirklich nur eine FR ist. – eddi
@eddi Was ist ein FR? – TARehman
FR = Funktionsanfrage – Jaap