때때로 개인별로 여러 개의 관측치가있을 때 연령과 성별을 검색 할 때와 같이 식별자로 그룹화 된 데이터 세트의 첫 번째 행만 가져와야합니다. R 에서이 작업을 수행하는 가장 빠른 방법은 무엇입니까? 아래에서 collect ()를 사용했으며 더 좋은 방법이 있다고 생각합니다. 이 질문을 게시하기 전에 Google에서 조금 검색하고 ddply를 찾아서 시도했으며 매우 느리고 내 데이터 세트 (400,000 행 x 16 열, 7,000 개의 고유 ID)에서 메모리 오류가 발생했다는 것에 놀랐습니다. 상당히 빠르다.
(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
패키지 를 사용하는 가장 빠른 솔루션은 @Matthew Dowle의 답변을 참조하십시오 .
diff()
에서 첫 번째 ID를 선택할 수 있도록하는 것입니다 dx
.