2012-10-04 3 views
0

를 선택는 R 내가이 같은 데이터 프레임있어 중복을 통해 이동 및

id date    amt 
1 2012-05-03 10:33 32 
2 2012-06-01 12:49 242 
2 2012-06-05 00:09 43 
3 2012-06-03 05:19 323 
3 2012-06-08 08:45 12 
4 2012-06-09 12:38 32 
5 2012-06-09 10:31 53 

가 지금은 가장 빠른 날짜와 하나가 선택 될 수 있도록 중복 id 년대를 제거 할. 중복 항목의 수는 다양합니다. 각 항목의 첫 번째 항목 인 id과 해당하는 amt에만 관심이 있으므로 다른 모든 항목은 제거해야합니다.

는 내가 루프와 함께이 작업을 수행 할 수있는 방법을 이해하지만 R.

답변

3

의 짧고 우아한 해결책 newdata <- data[!duplicated(data$id), ] 같은 시도가있을 수있다 생각합니다.

편집 :

testdata <- data[with(data, order(id, date)), ] 

newdata <- testdata[!duplicated(testdata$id), ] 
+3

예, 날짜가 정렬되어 있습니다. – Aaron

+0

OK, 작동하는 것 같습니다. 날짜별로 정렬해야합니다. – sashkello

3

IDate.time를 할 키를 선호

library(data.table) 

datetime <- seq(as.POSIXct("2001-01-01"), as.POSIXct("2001-01-30"), l=7)  

DT <- data.table(id = c(1,2,2,3,3,4,5),x = datetime, amnt = sample(7)) 
DT 
## id     x amnt 
## 1: 1 2001-01-01 00:00:00 3 
## 2: 2 2001-01-05 20:00:00 4 
## 3: 2 2001-01-10 16:00:00 1 
## 4: 3 2001-01-15 12:00:00 5 
## 5: 3 2001-01-20 08:00:00 7 
## 6: 4 2001-01-25 04:00:00 6 
## 7: 5 2001-01-30 00:00:00 2 

DT[, .SD[which.min(x)],by=id] 
## id     x amnt 
## 1: 1 2001-01-01 00:00:00 3 
## 2: 2 2001-01-05 20:00:00 4 
## 3: 3 2001-01-15 12:00:00 5 
## 4: 4 2001-01-25 04:00:00 6 
## 5: 5 2001-01-30 00:00:00 2 

참고 data.table 것을 우아한 구문 data.table 사용 : @Aaron 다른 사람들이 아래에 언급 한 것처럼, 데이타가 정렬됩니다 가정 클래스가 아닌 POSIXct이지만이 솔루션은 우아함을 코딩하기위한 것으로 충분해야합니다.