Как удалить строку по ссылке в data.table?

Мой вопрос связан с присвоением по ссылке или копированием в data.table. Я хочу знать, можно ли удалить строки по ссылке, аналогично

DT[ , someCol := NULL]

Я хочу знать о

DT[someRow := NULL, ]

Я думаю, есть веская причина, почему эта функция не существует, так что, возможно, вы могли бы просто указать на хорошую альтернативу обычному подходу к копированию, как показано ниже. В частности, переходя к моей любимой из примера (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

Скажем, я хочу удалить первую строку из этой data.table. Я знаю, что могу сделать это:

DT <- DT[-1, ]

, но часто мы можем захотеть избежать этого, потому что мы копируем объект (и это требует около 3 * N памяти, если N object.size(DT), как указано здесь . Теперь я нашел set(DT, i, j, value). Я знаю, как устанавливать конкретные значения (как здесь: установить все значения в строках 1 и 2 и столбцах 2 и 3 в ноль)

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

[1116 Но как я могу стереть первые две строки, скажем? Doing

set(DT, 1:2, 1:3, NULL)

устанавливает весь DT в NULL.

Мои знания SQL очень ограничены, поэтому вы, ребята, говорите мне: данный data.table использует технологию SQL, есть ли эквивалент в команде SQL

DELETE FROM table_name
WHERE some_column=some_value

в data.table?

144
задан Community 23 May 2017 в 12:10
поделиться