2013-03-22 16 views
10

मैं अपने चर, आईडी के आधार पर डेटा सेट से डुप्लिकेट अवलोकन को हटाने का प्रयास कर रहा हूं। हालांकि, मैं निम्नलिखित नियमों पर आधारित अवलोकनों को हटाने के लिए चाहता हूं। नीचे दिए गए चर आईडी हैं, घरेलू सिर का लिंग (1-पुरुष, 2-मादा) और घरेलू सिर की उम्र। नियम इस प्रकार हैं। अगर घर में नर और मादा दोनों घरेलू सिर होते हैं, तो मादा घरेलू सिर अवलोकन को हटा दें। यदि एक घर या तो दो पुरुष या दो महिला सिर के रूप में, छोटे घर के सिर के साथ अवलोकन हटा दें। एक उदाहरण डेटा सेट नीचे है।नियमों के सेट के आधार पर डुप्लिकेट अवलोकन हटाएं

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)) 

उत्तर

12

तुम इतनी प्रत्येक id के लिए इच्छित प्रविष्टि पहला है पहले data.frame आदेश देने से यह करते हैं, और फिर डुप्लिकेट id रों साथ पंक्तियों को हटा सकते हैं।

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

मैं और अधिक जटिल सोच रहा था। लॉजिक +1 –

+0

का सरल उपयोग एक ही विचार था, लेकिन '-age' (+1) – adibender

+0

' id 10' के साथ नहीं आया, हालांकि आउटपुट से अनुपलब्ध प्रतीत होता है ... – adibender

8

data.table के साथ, यह "यौगिक प्रश्न" के साथ आसान है। डेटा को ऑर्डर करने के लिए जब आप इसे पढ़ते हैं, तो "कुंजी" सेट करें जब आप इसे "आईडी, सेक्स" के रूप में पढ़ते हैं (यदि किसी भी मादा मान किसी दिए गए आईडी के लिए पुरुष मानों से पहले आते हैं)।

> 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

अपना 'data.table' उत्तर +1 हमेशा आंख खोलने के लिए –

+0

को मेरा संपादन हटाना पड़ा क्योंकि मेरा समाधान "सबसे छोटा रखना" था। सवाल गलत पढ़ें। – Arun

संबंधित मुद्दे