2017-12-06 3 views
2

Ich arbeite durch die Einführung data.table Vignette wo in Abschnitt g) Warum j so flexibel halten? ein Beispiel gezeigt ist, dass zu meinem Anwendungsfall relevant:R-Datentabelle: Warum gehen Werte der verketteten Liste verloren?

DT[, .(val = list(c(a,b))), by = ID] 
# ID   val 
# 1: b 1,2,3,7,8,9 
# 2: a 4, 5,10,11 
# 3: c  6,12 

Ich habe ein minimales Arbeitsbeispiel, das Problem

set.seed(1234) 
size   <- 10 
ordering_ids <- rep(1:size, sample(1:size, replace=TRUE)) 
products  <- letters[seq_along(ordering_ids)] 
k   <- data.table(o=ordering_ids, p=products) 

Für size <- 10, höchstwahrscheinlich einige Einträge in NA führen zu erläutern, aber das ist nicht die Problem. Das Problem ist, dass über einen bestimmten size (etwa 6), verliere ich Einträge in den verketteten Listen:

k 
#  o p 
# 1: 1 a 
# 2: 1 b 
# 3: 2 c 
# 4: 2 d 
# 5: 2 e 
# 6: 2 f 
# 7: 2 g 
# 8: 2 h 
# 9: 2 i 
# 10: 3 j 
# 11: 3 k 
# 12: 3 l 
# 13: 3 m 
# 14: 3 n 
# 15: 3 o 
# 16: 3 p 
# 17: 4 q 
# 18: 4 r 
# [...] 

Ausführen des gleichen Befehl aus der Vignette:

k[o<=4, .(val=list(c(p))), by=o] 
# o   val 
# 1: 1   a,b 
# 2: 2 c,d,e,f,g,h, 
# 3: 3 j,k,l,m,n,o, 
# 4: 4 q,r,s,t,u,v, 

nun für Aufträge o=3, Die val Liste enthält nicht alle Einträge (siehe k Ausdruck, es sollte bis r gehen).

Was ist das Problem hier und wie könnte ich es beheben?

+0

Vielleicht ist er gerade nicht gedruckt. Geben Sie 'k [,. (Val = Liste (c (p))), durch = o] $ val [4]' ein, um den Wert zu überprüfen. – www

+0

Ich sehe, ich habe tatsächlich gedacht, aber war falsch Drucken – TMOTTM

+1

Wenn Sie nur tun, um die Daten in einer prägnanter Form zu durchsuchen, gibt es 'k [, toString (p), durch = o]'. Ich habe das Problem der Liste, die hier bei 6 Artikeln abgeschnitten wird, angesprochen: https://github.com/Rdatatable/data.table/issues/1523#issuecomment-349717900 – Frank

Antwort

0

Vielen Dank, dass Sie dies erwähnt haben, wir haben gerade eine Änderung auf das Standarddruckverhalten von nicht-atomaren Spalten (here) geschoben. Es wird ab der nächsten Version auf CRAN verfügbar sein; Wenn Sie die Entwicklungsversion ausprobieren möchten, lesen Sie den Artikel Installation wiki; Im Allgemeinen reicht die folgenden:

install.packages('data.table', type = 'source', 
       repos = 'http://Rdatatable.github.io/data.table') 

Dann wird Ihr Beispiel (mit set.seed(1234) in der folgenden führen):

k[o<=4, .(val=list(c(p))), by=o] 
#   o    val 
# 1: 1    a,b 
# 2: 2 c,d,e,f,g,h,... 
# 3: 3 j,k,l,m,n,o,... 
# 4: 4 q,r,s,t,u,v,... 
Verwandte Themen