Eine Dummy-Spalte für eine Spalte c
und ein gegebener Wert x
entspricht 1
wenn c==x
und 0 sonst. Normalerweise wird beim Erstellen von Dummies für eine Spalte c
ein Wert x
bei der Auswahl ausgeschlossen, da die letzte Dummy-Spalte keine Informationen w.r.t. die bereits vorhandenen Dummy-Spalten.R: Warnung beim Erstellen einer (langen) Liste von Dummies
Hier ist, wie ich versuche, für eine Spalte firm
, in einem data.table
eine lange Liste von Attrappen zu erstellen:
values <- unique(myDataTable$firm)
cols <- paste('d',as.character(inds[-1]), sep='_') # gives us nice d_value names for columns
# the [-1]: I arbitrarily do not create a dummy for the first unique value
myDataTable[, (cols):=lapply(values[-1],function(x)firm==x)]
Dieser Code zuverlässig für frühere Spalten gearbeitet, die kleinen eindeutigen Wert hatte. jedoch firm
größer:
tr(values)
num [1:3082] 51560090 51570615 51603870 51604677 51606085 ...
ich eine Warnung erhalten, wenn sie versuchen, die Spalten hinzufügen:
Warning message:
truelength (6198) is greater than 1000 items over-allocated (length = 36). See ?truelength. If you didn't set the datatable.alloccol option very large, please report this to datatable-help including the result of sessionInfo().
Soweit ich das beurteilen kann, gibt es noch alle Spalten, die ich brauche. Kann ich dieses Problem einfach ignorieren? Wird es zukünftige Berechnungen verlangsamen? Ich bin nicht sicher, was ich von diesem und dem relevanten von truelength
machen soll.
Geben Sie die Daten, nur ein Beispiel, verwenden Sie 'dput (myDataTable [1:10])'. ** Bearbeiten: ** sieht aus wie in Bezug auf die Größe der hinzuzufügenden Spalten, so dass Beispieldaten möglicherweise nicht einfach zu teilen sind. Haben Sie versucht, die erwähnte Option auf 'length (values)' zu setzen? – jangorecki
6000+ Spalten?!? :-O. Lies '' truumlength' und benutze 'alloc.col' mit' n' Argument, um freie Slots für die Anzahl der Spalten zu erstellen, die du erstellst .. sonst wirst du die Warnung erhalten, weil wir jedes Mal, wenn du sparst, zu viel Speicherplatz reservieren müssen Slots sind aufgebraucht .. – Arun
@Arun 'ncol (myDataTable)' gibt mir '[1] 3085', so dass die Nachricht keinen Sinn macht. Verstehe ich richtig, dass ich jedes Mal ineffizient bin, wenn ich einen riesigen Brocken von Spalten hinzufüge, für den ich nicht vorberechnet habe? In diesem Fall, da dies eine einzigartige Operation ist, denke ich, dass es mir gut geht. – FooBar