Data.table: Zeilenoperationen in data.table mit `by = .I`

Erstellt am 7. Juni 2016  ·  3Kommentare  ·  Quelle: Rdatatable/data.table

Ich habe Alternativen untersucht, wie man Zeilenoperationen in data.table und ich glaube, ich habe einen Fehler gefunden.

Diese drei Codezeilen sollten das gleiche Ergebnis zurückgeben. Das Ergebnis von by = .I scheint jedoch ein falsches Ergebnis zurückzugeben.

dt[, sdd := sum(.SD[, 2:4, with=FALSE]), by = 1:NROW(dt) ]
dt[, rowpos := .I][ , sdd := sd(.SD[, -1, with=FALSE]), by = rowpos ]
dt[ , sdd := sd(.SD[, -1, with=FALSE]), by = .I ]

Beispieldaten:
dt <- data.table(V0 =LETTERS[c(1,1,2,2,3)], V1=1:5, V2=3:7, V3=5:1)

Low bug

Alle 3 Kommentare

Alternativ sollte by = .I einen Fehler ausgeben, obwohl es schön wäre, wenn es mit einem i-expression Präsent funktioniert.

Ähnliches Problem bei der Verwendung von .N in by (wieder könnte man etwas naiv versuchen - dt[, ..., by = 1:.N] - obwohl dieser spezielle Ausdruck einen Fehler ausgibt, ist er nicht wirklich der "richtige" Fehler).

Warum fügen Sie nicht einfach die Funktion "rowwise" hinzu, indem Sie by = .I , was intuitiv klingt.

1063

Hallo @leoluyi ,

das Verhalten von by = .I entspricht by = NULL . Schauen Sie sich diese SO-Diskussion an https://stackoverflow.com/questions/37667335/row-operations-in-data-table-using-by-i

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen