2013-04-25 24 views
9

Tôi có sau data.table (DT):Làm cách nào để chọn các cột được lập trình trong một data.table?

DT <- data.table(V1 = 1:3, V2 = 4:6, V3 = 7:9) 

Tôi muốn chọn một tập hợp con của các biến lập trình (tự động), bằng cách sử dụng một đối tượng mà tên biến có liên quan được lưu trữ. Ví dụ, tôi muốn chọn hai cột "V1" và "V3" được lưu trữ trong một biến "giữ"

keep <- c("V1", "V3") 

Nếu chúng ta chọn "giữ" cột từ một data.frame, sau đây sẽ công việc:

DT[keep] 

Thật không may, điều này không hoạt động khi đây là dữ liệu. Tôi nghĩ data.frame và data.table giống hệt với loại hành vi này, nhưng chúng không phải là một cách ứng xử. Bất cứ ai có thể tư vấn về cú pháp chính xác?

Trả lời

14

Điều này được bao gồm trong FAQ 1.1, 1.2 and 2.17.

Một số khả năng:

DT[, c('V1','V3'), with = FALSE] 
DT[, c(1,3), with = FALSE] 
DT[, list(V1,V3)] 

Lý do DF[c('V1','V3')] công trình vì nó làm cho một data.frame được bao phủ trong ?`[.data.frame`

khung dữ liệu có thể được lập chỉ mục trong một số chế độ. Khi [[[ được sử dụng chỉ với một chỉ số vector (x[i] hoặc x[[i]]), chúng lập chỉ mục khung dữ liệu như thể nó là một danh sách. Trong cách sử dụng này, đối số drop bị bỏ qua, với cảnh báo .


Từ data.table 1.10.2, bạn có thể sử dụng tiền tố .. khi Subsetting cột cách lập trình:

Khi j là một biểu tượng bắt đầu bằng .. nó sẽ được xem xét trong phạm vi gọi và giá trị của nó đưa đến là tên cột hoặc số [...] Đó là thử nghiệm.

Như vậy:

DT[ , ..keep] 
# V1 V3 
# 1: 1 7 
# 2: 2 8 
# 3: 3 9 
Các vấn đề liên quan