Verwenden Sie data.table, sage ich den Schlüssel mit zwei Spalten, und eine der Spalten hat fehlende Werte. Datentabelle scheint die NA
Werte zu den ersten Werten zu sortieren.Wie sortiert data.table NA-Werte in Schlüsselspalten?
require(data.table)
set.seed(919)
# Create sample data
dt <- data.table(
key1 = rep(1:10, each = 10),
key2 = rep_len(letters, 100)
)
# Set some key2 values to missing
dt[sample(1:100, 10), "key2"] <- NA
# Set key (sort)
setkeyv(dt, c("key1", "key2"))
dt
# 1: 1 NA
# 2: 1 a
# 3: 1 b
# 4: 1 c
# 5: 1 d
# 6: 1 f
# 7: 1 g
# 8: 1 h
# 9: 1 i
# 10: 1 j
# 11: 2 NA
# 12: 2 NA
# 13: 2 k
# 14: 2 m
# 15: 2 n
# 16: 2 o
# 17: 2 p
# 18: 2 q
# 19: 2 r
# 20: 2 s
# 21: 3 a
# 22: 3 b
# 23: 3 c
# 24: 3 d
# 25: 3 u
# 26: 3 v
# 27: 3 w
# 28: 3 x
# 29: 3 y
# 30: 3 z
# 31: 4 e
# 32: 4 f
# 33: 4 g
# 34: 4 h
# 35: 4 i
# 36: 4 j
# 37: 4 k
# 38: 4 l
# 39: 4 m
# 40: 4 n
# 41: 5 NA
# 42: 5 NA
# 43: 5 o
# 44: 5 q
# 45: 5 r
# 46: 5 s
# 47: 5 u
# 48: 5 v
# 49: 5 w
# 50: 5 x
# 51: 6 NA
# 52: 6 a
# 53: 6 b
# 54: 6 c
# 55: 6 d
# 56: 6 e
# 57: 6 g
# 58: 6 h
# 59: 6 y
# 60: 6 z
# 61: 7 i
# 62: 7 j
# 63: 7 k
# 64: 7 l
# 65: 7 m
# 66: 7 n
# 67: 7 o
# 68: 7 p
# 69: 7 q
# 70: 7 r
# 71: 8 NA
# 72: 8 NA
# 73: 8 a
# 74: 8 b
# 75: 8 t
# 76: 8 u
# 77: 8 w
# 78: 8 x
# 79: 8 y
# 80: 8 z
# 81: 9 NA
# 82: 9 c
# 83: 9 d
# 84: 9 e
# 85: 9 f
# 86: 9 h
# 87: 9 i
# 88: 9 j
# 89: 9 k
# 90: 9 l
# 91: 10 NA
# 92: 10 m
# 93: 10 n
# 94: 10 o
# 95: 10 p
# 96: 10 r
# 97: 10 s
# 98: 10 t
# 99: 10 u
# 100: 10 v
# key1 key2
Kommt das immer vor, oder werde ich auf Probleme stoßen, wenn ich immer annehme, dass das wahr ist?
Ja, 'data.table' verhält sich wie Base R' sort (x, na.last = FALSE) 'wo immer es sortiert, und ich denke, dass die Autoren sehr wahrscheinlich bei dieser Konvention bleiben werden. Wenn Sie nur Ihre Daten sortieren möchten, sollten Sie 'setorder' berücksichtigen. Das Setzen eines Schlüssels hat andere Zwecke, wobei das Sortieren nur ein Nebeneffekt ist. Übrigens gibt es dort die Standardsyntax 'dt [sample (1: 100, 10), key2: = NA]' und Sie sollten darauf achten, dass Sie die zweistellige Zeichenkette '' NA'' für 'NA' verwechseln (nicht ein Problem in Ihrem Beispiel). – Frank
Oh, stieß gerade auf diese mögliche Begründung: "NAs sind intern große negative Zahl [s]", die die Sortierung erklären kann. https://github.com/Rdatatable/data.table/issues/434 – Frank
Großartig, vielen Dank! Diese sind sehr hilfreich. –