2016-06-04 19 views
7

Tôi có data.table (data trong phần sau) với 10 cột (C1, ..., C10) và tôi muốn xóa các hàng trùng lặp.Hoàn tác setkey() trên data.table trong R

tôi vô tình sử dụng setkey(data,C1), vì vậy bây giờ khi tôi chạy unique(data) tôi chỉ nhận được hàng độc đáo dựa trên các cột C1, trong khi tôi muốn xóa một hàng duy nhất nếu nó giống y hệt nhau trên tất cả các cột C1, ..., C10.
Có cách nào để hoàn tác thao tác setkey() không? Tôi tìm thấy this question nhưng nó không giúp giải quyết vấn đề của tôi.

PS: Tôi có thể giải quyết vấn đề bằng cách đặt tất cả các cột trong data.table làm khóa với setkeyv(data, paste0("C", 1:10)), nhưng đây không phải là giải pháp thanh lịch/thiết thực.

Trả lời

9

Trước tiên, bạn có thể sử dụng setkey(data, NULL) để xóa khóa.

Thứ hai, unique.data.table có một lựa chọn by mà sẽ cho phép bạn chỉ định một cách nhanh chóng mà cột sử dụng để so sánh (không phân biệt trong số đó chính là định hiện hành):

unique(data, by = paste0("C", 1:10)) 

Thứ ba, thay vì sử dụng setkey cho nhiều phím, sử dụng setkeyv để vượt qua một vector character:

setkeyv(data, paste0("C", 1:10)) 

một đọc thấu đáo về ?setkey?unique.data.table sẽ phải obv iated tất cả điều này.

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