कभी-कभी मुझे पहचानकर्ता द्वारा समूहीकृत डेटा सेट की केवल पहली पंक्ति प्राप्त करने की आवश्यकता होती है, जैसे कि जब प्रति व्यक्ति कई अवलोकन होते हैं तो उम्र और लिंग प्राप्त करते हैं। R में ऐसा करने का एक तेज़ (या सबसे तेज़) तरीका क्या है? मैंने नीचे समुच्चय () का उपयोग किया और संदेह है कि बेहतर तरीके हैं। इस प्रश्न को पोस्ट करने से पहले मैंने Google पर थोड़ी खोज की, पाया और ddply की कोशिश की, और आश्चर्यचकित था कि यह बहुत धीमा था और मुझे अपने डेटासेट (400,000 पंक्तियों x 16 कॉल, 7,000 अद्वितीय आईडी) पर मेमोरी त्रुटियां दीं, जबकि समग्र () संस्करण यथोचित उपवास था।
(dx <- data.frame(ID = factor(c(1,1,2,2,3,3)), AGE = c(30,30,40,40,35,35), FEM = factor(c(1,1,0,0,1,1))))
# ID AGE FEM
# 1 30 1
# 1 30 1
# 2 40 0
# 2 40 0
# 3 35 1
# 3 35 1
ag <- data.frame(ID=levels(dx$ID))
ag <- merge(ag, aggregate(AGE ~ ID, data=dx, function(x) x[1]), "ID")
ag <- merge(ag, aggregate(FEM ~ ID, data=dx, function(x) x[1]), "ID")
ag
# ID AGE FEM
# 1 30 1
# 2 40 0
# 3 35 1
#same result:
library(plyr)
ddply(.data = dx, .var = c("ID"), .fun = function(x) x[1,])
अद्यतन: चेस के जवाब और मैट पार्कर की टिप्पणी के लिए देखें जो मैं सबसे सुरुचिपूर्ण दृष्टिकोण मानता हूं। data.table
पैकेज का उपयोग करने वाले सबसे तेज़ समाधान के लिए @ मट्टू डोवाले का उत्तर देखें ।
diff()
ताकि आप पहली आईडी को उठा सकें dx
।