Tôi cần phải thả một cột từ một tệp dữ liệu. Khung chứa một vài trăm cột.Thành ngữ để xóa một cột đơn lẻ trong một dữ liệu. Có thể là
Với data.frame
, tôi muốn sử dụng subset
để làm điều này thuận tiện:
> dat <- data.table(data.frame(x=runif(10),y=rep(letters[1:5],2),z=runif(10)),key='y')
> subset(dat,select=c(-z))
x y
1: 0.1969049 a
2: 0.7916696 a
3: 0.9095970 b
4: 0.3529506 b
5: 0.4923602 c
6: 0.5993034 c
7: 0.1559861 d
8: 0.9929333 d
9: 0.3980169 e
10: 0.1921226 e
Rõ ràng đây vẫn hoạt động, nhưng nó có vẻ như không phải là một rất data.table
-like thành ngữ. Tôi có thể tự xây dựng một danh sách các tên cột tôi muốn giữ lại, mà dường như nhiều hơn một chút data.table
-like:
> dat[,list(x,y)]
x y
1: 0.1969049 a
2: 0.7916696 a
3: 0.9095970 b
4: 0.3529506 b
5: 0.4923602 c
6: 0.5993034 c
7: 0.1559861 d
8: 0.9929333 d
9: 0.3980169 e
10: 0.1921226 e
Nhưng sau đó tôi phải xây dựng một danh sách như vậy, mà thiếu uyển chuyển.
Có phải là subset
cách thích hợp để thuận tiện thả một hoặc hai cột hoặc nó có gây ra hiệu suất không? Nếu không, cách tốt hơn là gì?
Sửa
Benchmarks:
> dat <- data.table(data.frame(x=runif(10^7),y=rep(letters[1:10],10^6),z=runif(10^7)),key='y')
> microbenchmark(subset(dat,select=c(-z)), dat[,list(x,y)])
Unit: milliseconds
expr min lq median uq max
1 dat[, list(x, y)] 102.62826 167.86793 170.72847 199.89789 792.0207
2 subset(dat, select = c(-z)) 33.26356 52.55311 53.53934 55.00347 180.8740
Nhưng thực sự, nơi nó có thể quan trọng hơn là cho bộ nhớ nếu subset
bản sao toàn bộ data.table
.
Một câu hỏi: ý định của bạn là bỏ cột này là gì? Tôi có nghĩa là bạn sẽ làm gì với data.table kết quả? – Arun
@Arun Trường hợp cụ thể khiến tôi hỏi, tôi đã đặt tên sai cột khi tạo bằng ': =' và muốn thả nó. Nhưng nó đi lên tất cả các thời gian mà bán phá giá một hoặc hai cột là tiện dụng. –
Khi @mnel giải thích, nếu bạn muốn xóa, bạn có thể trực tiếp sử dụng toán tử ': =' và nếu bạn muốn thực hiện các phép tính không có cột này, thì bạn luôn có thể sử dụng '.SDcols'. Vì vậy, bạn có thể tránh hoàn toàn 'tập hợp con'/'với giải pháp = FALSE'. – Arun