Terkadang saya hanya perlu mendapatkan baris pertama dari kumpulan data yang dikelompokkan berdasarkan pengidentifikasi, seperti saat mengambil usia dan jenis kelamin saat ada beberapa pengamatan per individu. Apa cara cepat (atau tercepat) untuk melakukan ini di R? Saya menggunakan agregat () di bawah dan curiga ada cara yang lebih baik. Sebelum memposting pertanyaan ini saya mencari sedikit di google, menemukan dan mencoba ddply, dan terkejut bahwa itu sangat lambat dan memberi saya kesalahan memori pada dataset saya (400.000 baris x 16 cols, 7.000 ID unik), sedangkan versi agregat () cukup cepat.
(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,])
UPDATE: Lihat jawaban Chase dan komentar Matt Parker untuk apa yang saya anggap sebagai pendekatan yang paling elegan. Lihat jawaban @Matthew Dowle untuk solusi tercepat yang menggunakan data.table
paket.
diff()
sehingga Anda dapat mengambil ID pertama dx
.