dt = data.table(x = c(1,1,2,2,2,2,3,3,3,3))
dt[, y := if(.N > 2) .N else NA, by = x] # fail
dt[, y := if(.N > 2) .N else NA_integer_, by = x] # good
Diese erste Gruppierung schlägt fehl, weil NA
einen Typ hat und nicht ganzzahlig ist. Gibt es eine Möglichkeit, die Datentabelle anzuweisen, dies zu ignorieren und alle NAs zu einem Typ zu machen, der die Konsistenz beibehält?R data.table NA type consistency
Ich kann NA_integer
hier manuell einstellen, aber wenn ich viele Spalten verschiedener Typen habe, ist es schwierig, alle NA-Typen korrekt einzustellen.
BTW, welchen NA-Typ sollte ich für Date/IDate/ITime verwenden?
@RichardScriven Ich bin mir sicher, zweitens funktioniert. Verwenden Sie RStudio? Manchmal wiederholt RStuidio die vorherige Fehlermeldung, wenn neue Befehle erfolgreich ausgeführt wurden. – jf328
@RichardScriven oh, ich verstehe warum. Führen Sie die beiden nicht nacheinander aus. Der fehlgeschlagene Befehl ändert die Tabelle tatsächlich. – jf328
Ihre "x" -Spalte ist keine "ganze Zahl" - ich denke, die "ganze Zahl" wird wegen '.N' benötigt, so dass Sie' .N' als zurückgegebenen Wert verwenden könnten Hardcode 'NA_integer_' für verschiedene' Typ's. In anderen Fällen setzen Sie den 'storage.mode' des zurückgegebenen Wertes (hier' NA') auf den entsprechenden Typ. –