2012-06-19 2 views
3

데이터 프레임의 온라인 설문에 응답하는 4 명의 타임 스탬프 항목이 있습니다. 첫 번째 열은 시간이고 두 번째 열은 학생의 ID입니다 (id : 1,2,3,4). 내가 항목의 타임 스탬프를 추출하기 위해 각 학생에 대한 최초의 5 항목의 인덱스를 추출하기 위해 노력하고있어데이터 프레임의 각 요소에 대한 상위 n 번째 값의 인덱스를 추출하십시오.

DF <- data.frame(cbind(Time=1:60, ID=sample(1:4, 60, replace=T))) 

: 다음은 시뮬레이션 dataframe이다. 이것은 20 개의 값 배열을 반환해야합니다 (4 명의 학생 X 처음 5 개의 항목).

ddply()를 혼합하여 rank(), order()를 사용해 보았지만 성공하지 못했습니다. 좋은 제안이야? 감사합니다.

+0

이 질문에 대한 내 대답을 참조 HTTP ://stackoverflow.com/questions/11109828/subsetting-a-dataframe-based-on-daily-maxima –

+0

감사합니다. @mplourde! 나는 tail()이 맞춤 길이를 지정할 수 있다는 것을 완전히 놓쳤다! – SeanM

답변

1

mplourde이 코멘트에 준 대답은 매우 중요하지만, 너무 plyr으로이 작업을 수행 할 수 있습니다

library(plyr) 
ddply(DF, .(ID), function(x) data.frame(Time_sorted=tail(sort(x$Time)))) 

by 버전 :

do.call(rbind, by(DF, DF$ID, function(x) tail(x[order(x$Time),]))) 
+1

첫 번째 5 번째 항목과 결과 집합 20을 원하면 'ddply (DF,. (ID), function (x) data.frame (Time_sorted = tail (sort (x $), 5)))'). – John

+0

감사 @ 재 스틴, @ 존! 나는 상위 5 개 항목에 대해'tail()'대신'head()'가 사용되어야한다고 가정합니다 : 'ddply (DF, .ID), function (x) data.frame (Time_sorted = head() sort (x $ Time), 5)))' – SeanM

+0

@SeanM 사실, 꼬리말 (..., 5)'을 원한다. Sort는 기본적으로 오름차순으로 항목을 배치합니다. 'head'를 사용하면'decline = TRUE'를'sort' 호출에 추가하려고합니다. – Justin

관련 문제