2010-05-24 25 views
20

Giả sử tôi có một khung dữ liệu df với hai hoặc nhiều cột, có cách dễ dàng để sử dụng hàm duy nhất() hoặc hàm R khác để tạo một tập hợp con các kết hợp duy nhất của hai hoặc nhiều cột hơn?R tương đương với SELECT DISTINCT trên hai hoặc nhiều trường/biến

Tôi biết tôi có thể sử dụng sqldf() và viết một "SELECT DISTINCT var1, var2, ... varN" truy vấn dễ dàng, nhưng tôi đang tìm cách R để thực hiện việc này.

Nó xảy ra với tôi thử ftable buộc thành dataframe và sử dụng các tên trường, nhưng tôi cũng có được các bảng chéo kết hợp không tồn tại trong tập dữ liệu:

uniques <- as.data.frame(ftable(df$var1, df$var2)) 

Trả lời

34

unique công trình trên data.frame vì vậy unique(df[c("var1","var2")]) phải là thứ bạn muốn.

lựa chọn khác là distinct từ dplyr package:

df %>% select(var1, var2) %>% distinct 

(hoặc trông như già cách distinct(select(df, var1, var2))).

-2

để giữ tất cả các biến khác trong việc sử dụng df này:

unique_rows <- !duplicated(df[c("var1","var2")]) 

unique.df <- df[unique_rows,] 

Một ít đề nghị phương pháp được sử dụng row.names() # (xem David bình luận dưới đây):

unique_rows <- row.names(unique(df[c("var1","var2")])) 

unique.df <- df[unique_rows,] 
+2

số hoạt động trên hàng tên luôn luôn là một ý tưởng tồi. Chỉ cần sử dụng 'trùng lặp' nếu bạn muốn một vector boolean. –

+0

tôi không chắc chắn tại sao nó lại bị bỏ phiếu :) – sbaniwal

+0

Vì bạn đã chỉnh sửa câu trả lời của mình mà không cần thêm bất kỳ ghi chú/đóng góp nào. Vì vậy, không ai biết bạn thực sự đã sửa câu trả lời của bạn. –

0

@ câu trả lời Marek rõ ràng là đúng, nhưng có thể đã lỗi thời. Các phiên bản hiện tại (0.7.4) cho phép một mã thậm chí đơn giản hơn:

Đơn giản chỉ cần sử dụng:

df %>% distinct(var1, var2) 

Nếu bạn muốn giữ lại tất cả các cột, thêm

df %>% distinct(var1, var2, .keep_all = TRUE) 
Các vấn đề liên quan