Jak usunąć wiersz według odniesienia w data.table?
Moje pytanie dotyczy przypisania przez odniesienie do kopiowaniadata.table
. Chcę wiedzieć, czy można usuwać wiersze według odniesienia, podobnie jak
DT[ , someCol := NULL]
Chcę o tym wiedzieć
DT[someRow := NULL, ]
Sądzę, że jest dobry powód, dla którego ta funkcja nie istnieje, więc może po prostu wskażesz dobrą alternatywę dla zwykłego podejścia do kopiowania, jak poniżej. W szczególności, chodzenie z moim ulubionym z przykładu (data.table),
DT = data.table(x = rep(c("a", "b", "c"), each = 3), y = c(1, 3, 6), v = 1:9)
# x y v
# [1,] a 1 1
# [2,] a 3 2
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 9
Powiedz, że chcę usunąć pierwszy wiersz z tej tabeli danych. Wiem, że potrafię to zrobić:
DT <- DT[-1, ]
ale często możemy chcieć tego uniknąć, ponieważ kopiujemy obiekt (a to wymaga około 3 * N pamięci, jeśli N)object.size(DT)
, jak wskazano tutaj. Teraz znalazłemset(DT, i, j, value)
. Wiem, jak ustawić określone wartości (jak tutaj: ustaw wszystkie wartości w wierszach 1 i 2 oraz kolumny 2 i 3 na zero)
set(DT, 1:2, 2:3, 0)
DT
# x y v
# [1,] a 0 0
# [2,] a 0 0
# [3,] a 6 3
# [4,] b 1 4
# [5,] b 3 5
# [6,] b 6 6
# [7,] c 1 7
# [8,] c 3 8
# [9,] c 6 9
Ale jak mogę wymazać pierwsze dwa wiersze, powiedzmy? Robić
set(DT, 1:2, 1:3, NULL)
ustawia cały DT na NULL.
Moja wiedza SQL jest bardzo ograniczona, więc wy mówicie: podana data.table używa technologii SQL, czy istnieje odpowiednik polecenia SQL
DELETE FROM table_name
WHERE some_column=some_value
w data.table?