2013-02-21 37 views
8

Giả sử tôi có một data.table R:cột Truy cập trong data.table sử dụng một vector đặc trưng của tên cột

DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9) 

và tôi có một vector đặc trưng của tên cột mà tôi muốn trích xuất, hoặc nhiều hơn thường hoạt động trên:

cols = c("x","y") 

Ví dụ, làm thế nào tôi có thể sử dụng cols để tạo ra tương đương với

DT[,lapply(.SD[,list(x,y)], min) ] 

Có cách nào để xác định danh sách (x, y) bằng cách sử dụng vector cols không?

+0

tương tự: http://stackoverflow.com/questions/14937165/using-dynamic-column -names-in-data-table –

Trả lời

7

Bạn có thể sử dụng tùy chọn with = FALSE:

> all.equal(DT[,list(x,y)], DT[, cols, with = FALSE]) 
[1] TRUE 
> all.equal(DT[,.SD[,list(x,y)][min(v)]], DT[,.SD[,cols, with = FALSE][min(v)]]) 
[1] TRUE 

Thông tin chi tiết dưới FAQ 1.6 Tôi tin rằng: http://datatable.r-forge.r-project.org/datatable-faq.pdf để

+0

Cảm ơn! Tôi đã thay đổi câu hỏi của tôi một chút trong khi bạn đang trả lời nó, nhưng giải pháp vẫn có vẻ tốt. – DavidR

+0

Sử dụng với = FALSE bên trong một .SD có vẻ giống như một thành ngữ hữu ích. Nếu đó là một cách tiếp cận được khuyến nghị cho data.table, tôi tự hỏi nếu nó phải được trong data.table hoặc các ví dụ hoặc FAQ? @MatthewDowle – DavidR

+1

@DavidR Có lẽ '.SDcols'? Xem? Data.table và tìm kiếm thẻ này cho "SDcols". –

Các vấn đề liên quan