Câu hỏi của tôi liên quan đến bài tập bằng cách tham chiếu so với sao chép trong data.table
. Tôi muốn biết nếu một người có thể xóa các hàng bằng cách tham chiếu, tương tự như
DT[ , someCol := NULL]
Tôi muốn biết về
DT[someRow := NULL, ]
Tôi đoán có một lý do chính đáng cho lý do tại sao chức năng này không tồn tại, vì vậy có lẽ bạn có thể chỉ ra một giải pháp thay thế tốt cho phương pháp sao chép thông thường, như dưới đây. Cụ thể, đi với ví dụ yêu thích của tôi (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
Nói rằng tôi muốn xóa hàng đầu tiên khỏi dữ liệu này. Tôi biết tôi có thể làm điều này:
DT <- DT[-1, ]
nhưng thường chúng ta có thể muốn tránh điều đó, bởi vì chúng ta đang sao chép đối tượng (và điều đó đòi hỏi khoảng 3 * N bộ nhớ, nếu N object.size(DT)
, như được chỉ ra ở đây . Bây giờ tôi đã tìm thấy set(DT, i, j, value)
. Tôi biết cách đặt các giá trị cụ thể (như ở đây: đặt tất cả các giá trị trong hàng 1 và 2 và cột 2 và 3 về 0)
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
Nhưng làm thế nào tôi có thể xóa hai hàng đầu tiên, nói? Đang làm
set(DT, 1:2, 1:3, NULL)
đặt toàn bộ DT thành NULL.
Kiến thức SQL của tôi rất hạn chế, vì vậy các bạn nói với tôi: data data.table sử dụng công nghệ SQL, có tương đương với lệnh SQL không
DELETE FROM table_name
WHERE some_column=some_value
trong data.table?
DT[ , keep := .I > 1]
, sau đó tập hợp con cho các hoạt động sau này:, DT[(keep), ...]
thậm chí có thể setindex(DT, keep)
là tốc độ của tập hợp con này. Không phải là thuốc chữa bách bệnh, nhưng đáng để xem là một lựa chọn thiết kế trong quy trình làm việc của bạn - bạn có thực sự muốn xóa tất cả các hàng đó khỏi bộ nhớ , hoặc bạn muốn loại trừ chúng? Câu trả lời khác nhau tùy theo trường hợp sử dụng.
data.table()
sử dụng công nghệ SQL nhiều đến mức người ta có thể vẽ song song giữa các hoạt động khác nhau trong SQL và các đối số khác nhau cho adata.table
. Đối với tôi, tham chiếu đến "công nghệ" phần nào ngụ ý rằng việcdata.table
ngồi trên cơ sở dữ liệu SQL ở đâu đó, mà AFAIK không phải là trường hợp.