Bazen, kişi başına birden fazla gözlem olduğunda yaş ve cinsiyet alırken, bir tanımlayıcı tarafından gruplandırılmış bir veri kümesinin yalnızca ilk satırını almam gerekir. Bunu R'de yapmanın hızlı (veya en hızlı) yolu nedir? Aşağıdaki aggregate () yöntemini kullandım ve daha iyi yollar olduğundan şüpheleniyorum. Bu soruyu göndermeden önce, Google'da biraz arama yaptım, ddply'ı buldum ve denedim ve veri kümemde (400.000 satır x 16 sütun, 7.000 benzersiz kimlik) bellek hataları verdiğime şaşırdım, toplam () sürümü oldukça hızlıydı.
(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,])
GÜNCELLEME: En zarif yaklaşım olarak gördüğüm şeyler için Chase'in cevabına ve Matt Parker'ın yorumuna bakın. Paketi kullanan en hızlı çözüm için @Matthew Dowle'ın cevabına bakınız data.table
.
diff()
, ilk kimliğinizi alabilmeniz için kimliklerinizden birinde olmayan bir değeri birleştirmektir dx
.