Bất kỳ điều nào sau đây sẽ xóa cột foo
khỏi data.table df3
:
# Method 1 (and preferred as it takes 0.00s even on a 20GB data.table)
df3[,foo:=NULL]
df3[, c("foo","bar"):=NULL] # remove two columns
myVar = "foo"
df3[, (myVar):=NULL] # lookup myVar contents
# Method 2a -- A safe idiom for excluding (possibly multiple)
# columns matching a regex
df3[, grep("^foo$", colnames(df3)):=NULL]
# Method 2b -- An alternative to 2a, also "safe" in the sense described below
df3[, which(grepl("^foo$", colnames(df3))):=NULL]
data.table cũng hỗ trợ cú pháp sau:
## Method 3 (could then assign to df3,
df3[, !"foo"]
mặc dù nếu bạn thực sự muốn xóa cột "foo"
khỏi df3
(thay vì chỉ in chế độ xem của df3
cột trừ "foo"
) thì bạn thực sự muốn sử dụng Phương pháp 1 thay thế.
(Lưu ý rằng nếu bạn sử dụng một phương thức dựa vào grep()
hoặc grepl()
, bạn cần phải đặt pattern="^foo$"
chứ không phải "foo"
, nếu bạn không muốn các cột có tên như "fool"
và "buffoon"
(nghĩa là các cột chứa foo
dưới dạng chuỗi con) cũng được khớp và xóa.)
Tùy chọn ít an toàn hơn, tốt cho sử dụng tương tác:
Hai thành ngữ tiếp theo cũng sẽ hoạt động - nếu df3
chứa kết hợp cột"foo"
- nhưng sẽ thất bại theo cách có thể bất ngờ nếu không. Ví dụ: nếu bạn sử dụng bất kỳ tệp nào trong số chúng để tìm kiếm cột không tồn tại "bar"
, bạn sẽ kết thúc với dữ liệu không có hàng.
Kết quả là, chúng thực sự phù hợp nhất cho việc sử dụng tương tác trong đó người ta có thể, ví dụ, muốn hiển thị một data.table trừ bất kỳ cột nào có tên chứa chuỗi con "foo"
. Đối với mục đích lập trình (hoặc nếu bạn thực sự muốn xóa (các) cột df3
thay vì từ bản sao của nó), Phương thức 1, 2a và 2b thực sự là những lựa chọn tốt nhất.
# Method 4:
df3[, .SD, .SDcols = !patterns("^foo$")]
Cuối cùng, có những cách tiếp cận bằng cách sử dụng with=FALSE
, mặc dù data.table
đang dần chuyển sang sử dụng đối số này, vì vậy bây giờ nó không được khuyến khích ở nơi bạn có thể tránh nó; hiển thị ở đây để bạn biết tùy chọn tồn tại trong trường hợp bạn thực sự cần nó:
# Method 5a (like Method 3)
df3[, !"foo", with=FALSE]
# Method 5b (like Method 4)
df3[, !grep("^foo$", names(df3)), with=FALSE]
# Method 5b (another like Method 4)
df3[, !grepl("^foo$", names(df3)), with=FALSE]
dt
thay vìdf3
...