2012-03-30 25 views
45

Tôi có một khung dữ liệu với> 100 cột và tôi sẽ tìm các hàng duy nhất bằng cách chỉ so sánh hai cột. Tôi hy vọng đây là một cách dễ dàng, nhưng tôi không thể làm cho nó hoạt động với chính mình unique hoặc duplicated.Độc đáo trên một khung dữ liệu chỉ với các cột được chọn

Trong dưới đây, tôi muốn duy nhất chỉ sử dụng id và id2:

data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 

id id2 somevalue 
1 1   x 
1 1   y 
3 4   z 

Tôi muốn để có được một trong hai:

id id2 somevalue 
1 1   x 
3 4   z 

hay:

id id2 somevalue 
1 1   y 
3 4   z 

(Tôi không có tùy chọn nào trong số các hàng duy nhất được lưu giữ)

+0

đầu ra mong muốn của bạn không được xác định rõ. Làm thế nào để bạn chọn để bao gồm x nhưng không phải y? Quyết định này sẽ cần phải được thực hiện cho mỗi cột của mỗi hàng lặp đi lặp lại, và bạn đã không đưa ra chỉ dẫn về cách thực hiện nó. – joran

+0

Tôi không có sở thích cho dù 'x' hoặc 'y' được bao gồm. Tôi sẽ cập nhật câu hỏi. – Ina

Trả lời

77

Ok, nếu nó không quan trọng mà giá trị trong phi nhân đôi cột bạn chọn, điều này nên được khá dễ dàng:

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z")) 
> dat[!duplicated(dat[,c('id','id2')]),] 
    id id2 somevalue 
1 1 1   x 
3 3 4   z 

Bên trong duplicated cuộc gọi, tôi chỉ đơn giản là đi qua chỉ những cột từ dat rằng Tôi không muốn bản sao của. Mã này sẽ tự động luôn chọn đầu tiên của bất kỳ giá trị mơ hồ nào. (Trong trường hợp này, x.)

+0

Phiên bản dành cho dữ liệu – Ferroao

+0

@Ferroao có thể lập hóa đơn theo trang web này là gì, không thể có trong SQL http://www.dofactory.com/sql/select-distinct –

8

Sử dụng unique():

dat <- data.frame(id=c(1,1,3),id2=c(1,1,4),somevalue=c("x","y","z"))  
dat[row.names(unique(dat[,c("id", "id2")])),] 
Các vấn đề liên quan