2013-03-22 24 views
10

Tôi đang cố xóa các quan sát trùng lặp khỏi tập dữ liệu dựa trên biến, id của tôi. Tuy nhiên, tôi muốn loại bỏ các quan sát dựa trên các quy tắc sau đây. Các biến dưới đây là id, giới tính của chủ hộ (1 nam, 2 nữ) và tuổi của chủ hộ. Luật như sau. Nếu một hộ gia đình có cả chủ hộ nam và nữ, thì hãy bỏ quan sát của chủ hộ nữ. Nếu một hộ gia đình là một trong hai nam hoặc hai đầu nữ, hãy loại bỏ sự quan sát với người chủ hộ trẻ. Một bộ dữ liệu mẫu dưới đây.Xóa các quan sát trùng lặp dựa trên bộ quy tắc

id = c(1,2,2,3,4,5,5,6,7,8,8,9,10) 
sex = c(1,1,2,1,2,2,2,1,1,1,1,2,1) 
age = c(32,34,54,23,32,56,67,45,51,43,35,80,45) 
data = data.frame(cbind(id,sex,age)) 

Trả lời

12

Bạn có thể làm điều này bằng cách đầu tiên ra lệnh data.frame nên nhập mong muốn cho mỗi id là lần đầu tiên, và sau đó loại bỏ các hàng với trùng lặp id s.

d <- with(data, data[order(id, sex, -age),]) 
# id sex age 
# 1 1 1 32 
# 2 2 1 34 
# 3 2 2 54 
# 4 3 1 23 
# 5 4 2 32 
# 7 5 2 67 
# 6 5 2 56 
# 8 6 1 45 
# 9 7 1 51 
# 10 8 1 43 
# 11 8 1 35 
# 12 9 2 80 
# 13 10 1 45 
d[!duplicated(d$id), ] 
# id sex age 
# 1 1 1 32 
# 2 2 1 34 
# 4 3 1 23 
# 5 4 2 32 
# 7 5 2 67 
# 8 6 1 45 
# 9 7 1 51 
# 10 8 1 43 
# 12 9 2 80 
# 13 10 1 45 
+0

Tôi đã suy nghĩ phức tạp hơn. Sử dụng logic đơn giản +1 –

+0

có cùng ý tưởng, nhưng không tìm ra '-age' (+1) – adibender

+0

' id 10' dường như bị thiếu từ đầu ra mặc dù ... – adibender

8

Với data.table, điều này dễ dàng với "truy vấn phức". Để sắp xếp dữ liệu khi bạn đọc, hãy đặt "khóa" khi bạn đọc "id, sex" (bắt buộc trong trường hợp bất kỳ giá trị nữ nào sẽ đến trước giá trị nam cho một ID nhất định).

> library(data.table) 
> DT <- data.table(data, key = "id,sex") 
> DT[, max(age), by = key(DT)][!duplicated(id)] 
    id sex V1 
1: 1 1 32 
2: 2 1 34 
3: 3 1 23 
4: 4 2 32 
5: 5 2 67 
6: 6 1 45 
7: 7 1 51 
8: 8 1 43 
9: 9 2 80 
10: 10 1 45 
+0

+1 câu trả lời 'data.table' của bạn luôn mở mắt –

+0

phải xóa bản chỉnh sửa của tôi vì giải pháp của tôi là" giữ trẻ nhất ". Đọc câu hỏi sai. – Arun

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