Đôi khi tôi chỉ cần lấy hàng đầu tiên của tập dữ liệu được nhóm theo một mã định danh, như khi truy xuất tuổi và giới tính khi có nhiều quan sát cho mỗi cá nhân. Cách nhanh nhất (hoặc nhanh nhất) để làm điều này trong R là gì? Tôi đã sử dụng tổng hợp () bên dưới và nghi ngờ có những cách tốt hơn. Trước khi đăng câu hỏi này, tôi đã tìm kiếm một chút trên google, tìm và thử ddply, và rất ngạc nhiên vì nó rất chậm và khiến tôi bị lỗi bộ nhớ trên tập dữ liệu của mình (400.000 hàng x 16 cols, 7.000 ID duy nhất), trong khi phiên bản tổng hợp () khá nhanh
(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,])
CẬP NHẬT: Xem câu trả lời của Chase và bình luận của Matt Parker về những gì tôi cho là cách tiếp cận thanh lịch nhất. Xem câu trả lời của @Matthew Dowle để biết giải pháp nhanh nhất sử dụng data.table
gói.
diff()
để bạn có thể lấy ID đầu tiên dx
.