Câu trả lời:
Đối với các phiên bản của data.table >= 1.9.8
, tất cả những thứ sau đây chỉ hoạt động:
library(data.table)
dt <- data.table(a = 1, b = 2, c = 3)
# select single column by index
dt[, 2]
# b
# 1: 2
# select multiple columns by index
dt[, 2:3]
# b c
# 1: 2 3
# select single column by name
dt[, "a"]
# a
# 1: 1
# select multiple columns by name
dt[, c("a", "b")]
# a b
# 1: 1 2
Đối với các phiên bản data.table < 1.9.8
(trong đó lựa chọn cột số yêu cầu sử dụng with = FALSE
), hãy xem phiên bản trước của câu trả lời này. Xem thêm TIN TỨC trên v1.9.8, TIỀM NĂNG THAY ĐỔI, điểm 3.
DT[,list(b:c)
, như tôi thấy thuận tiện khi chuyển đổi các cột trực tiếp trong bảng dữ liệu, ví dụ tôi có thể làm DT[,list(1/b,2*c)]
, nhưng điều này không hoạt động với.
with=FALSE
không cần thiết trong trường hợp này: github.com/Rdatitable/data.table/issues/ Kẻ
data.frame
cách nào tương thích để sử dụng with=FALSE
. Tuy nhiên, tính đến khoảng 3 tuần trước, phiên bản phát triển của data.table đã được sửa đổi để cuộc gọi như dt[, 2]
, dt[, 2:3]
, dt[, "b"]
, và dt[, c("b", "c")]
cư xử giống như họ làm trong với data.frame
s mà không cần phải thiết lập một cách rõ ràng with=FALSE
. Nó tuyệt vời! Xem ở đây để biết các cam kết cụ thể, bao gồm mục TIN TỨC mô tả sự thay đổi.
Hơi dài dòng một chút, nhưng tôi đã quen với việc sử dụng .SD
biến ẩn .
b<-data.table(a=1,b=2,c=3,d=4)
b[,.SD,.SDcols=c(1:2)]
Hơi rắc rối một chút, nhưng bạn không mất đi các tính năng dữ liệu khác (tôi không nghĩ vậy), vì vậy bạn vẫn có thể sử dụng các chức năng quan trọng khác như bảng tham gia, v.v.
Từ v1.10.2 trở đi, bạn cũng có thể sử dụng ..
dt <- data.table(a=1:2, b=2:3, c=3:4)
keep_cols = c("a", "c")
dt[, ..keep_cols]
dt[, !..keep_cols]
và dt[, -..keep_cols]
làm việc như mong đợi!
@Tom, cảm ơn bạn rất nhiều vì đã chỉ ra giải pháp này. Đó là công việc tốt cho tôi.
Tôi đang tìm cách để loại trừ một cột khỏi in và từ ví dụ trên. Để loại trừ cột thứ hai, bạn có thể làm một cái gì đó như thế này
library(data.table)
dt <- data.table(a=1:2, b=2:3, c=3:4)
dt[,.SD,.SDcols=-2]
dt[,.SD,.SDcols=c(1,3)]
dt[,"a"]
vàdt[,"a", with=FALSE]
để xem nó thực sự là một lựa chọn hữu ích.